当前位置: 首页 > 知识库问答 >
问题:

为什么抽象类可以这样实例化?

陈允晨
2023-03-14

我知道类和抽象类的主要区别是,抽象类不能被实例化,

但是我可以为抽象类创建对象

public abstract class Earth {

    abstract void sand();

    void land() {

    }
}

我用新的关键字创建了抽象的对象

    Earth mEarth = new Earth() {

        @Override
        void sand() {

        }
   };

我有一些问题在 Inet 上没有正确的答案,

new关键字是否用于实例类?

2)实例只不过是对象吗?

3)mEarth被称为物体(地球的实例)吗?

现在我可以调用任何方法(作为回调或作为值返回)mearth . sand();mearth . land();使用地球物体

共有3个答案

宫子晋
2023-03-14

希望这对您有所帮助:

没有伙伴,你不是在这里创建抽象类的实例。
相反,您正在创建抽象类的匿名子类的实例。
然后,在抽象类引用上调用指向子类对象的方法。

= 新地球() {};意味着有一个匿名实现,而不是对象的简单实例化,并且对象应该像 = 新地球();
抽象类型在很大程度上定义为无法创建的类型。我们可以创建它的子类型,但不能创建该类型本身的子类型。

施季
2023-03-14

1)是的,确实如此。虽然这不是唯一的方法,但却是最常见的(我认为也是最安全的)。

2)据我所知也是的。实例意味着您具有类含义的特殊方面,其实例成员(局部变量)等具有值。这些值特定于作为对象的每个实例

3)在这里,你正在创建一个地球匿名子类的对象(因为地球是抽象的,不能被实例化)。这意味着你不需要专门为你的子类命名,只是提供 sand() 的实现,以便具体(并且是可实例化的)。

隆长卿
2023-03-14

不能创建抽象类:

  new Earth(); // <- that's compile time error

但是,您可以像这样创建非抽象派生类

  // New non-abstract (local) class that extends Earth 
  new Earth() {
    // You have to override an abstract method
    @Override
    void sand() {
      ...
    }
  }

问题的答案:

  1. 是的,new 关键字创建新实例。
  2. 否;创建的实例是扩展 Earth 类的对象,而不仅仅是 Object
  3. mEarth场声明为地球,并包含一个扩展地球类的对象,因此您可以调用地球的任何方法。
 类似资料:
  • 可能重复: 面试:我们可以实例化抽象类吗? 我有一个定义了所有方法的抽象类(即其中没有包含任何抽象方法),如下所示: 还有一个JUnit测试类: 和内部类有关系吗?

  • 据我所知,Java抽象类不能实例化。然而,(抽象类)具有以下方法: 获取文档中提供了有关JAXP和Properties的更多详细信息。有谁能对此作更清楚的解释吗?。

  • 我知道抽象类不能被实例化,但在这段代码中被混淆了。这个代码到底是什么意思?

  • 问题内容: 在我的一次采访中,有人问我“我们是否可以实例化一个抽象类?” 我的回答是“不,我们不能。” 但是,面试官告诉我“错了,我们可以。” 我对此有些争论。然后他告诉我自己在家尝试这个。 在这里,我正在创建我的类的实例和抽象类的调用方法。有人可以向我解释一下吗?面试中我真的错了吗? 问题答案: 在这里,我正在创建我的课程的实例 不,你不是在这里创建抽象类的实例。而是要创建抽象类的匿名子类的实例

  • 问题内容: 我创建了一个空的抽象类,并从中继承了该类: 我期望输出是 但是,我得到的是 如果我删除(这样就变成一个普通的类)和/或如果我设置了其他值,问题(显然)就消失了。 这里发生了什么? 问题答案: 这实际上不是ABC的问题,而是PyMongo的问题。有一个关于它的问题在这里。似乎pymongo重写以返回某种数据库类。这意味着将返回一个数据库对象,该对象在布尔上下文中为true。这使ABCMe

  • 问题内容: 我读过我们只能通过继承抽象类来实例化它,但是我们不能直接实例化它。 但是,我看到我们可以通过调用另一个类的方法来创建具有抽象类类型的对象。 例如- 是一个抽象类,我们可以通过在该类中调用function 来实例化它: 抽象类如何在这里实例化? 问题答案: 您不能直接实例化一个抽象类,但是可以在没有具体类的情况下创建一个匿名类: 这也适用于接口。