我读到Class和Abstract Class之间的主要区别是,无法实例化abstract class,

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

public abstract class Earth {

    abstract void sand();

    void land() {

    }
}

并使用新的关键字为抽象创建了对象
    Earth mEarth = new Earth() {

        @Override
        void sand() {

        }
   };

我对此有一些疑问,但在Inet上没有适当的答案,

1)是用于实例类的新关键字吗?

2)是实例不过是对象?

3)是mEarth被称为对象(地球实例)吗?

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

最佳答案

您不能创建抽象类:

  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() {
      ...
    }
  }

问题的答案:
  • 是的,new关键字创建了新实例。
  • 不;创建的实例是扩展Earth类的对象,而不仅仅是Object
  • mEarth字段声明为Earth,并且包含扩展类Earth的对象,因此您可以调用Earth的任何方法。
  • 09-30 23:38