创建抽象类的实例

时间:2014-07-06 10:04:51

标签: java abstract-class

package corejava;
abstract class abstractA      // abstract class A
{
    abstract void abst();         // Abstarct Method
    void eat()                    // Non abstract method
    {
        System.out.println("non abstract");
    }
}
class B extends abstractA        // class B extends abstract Class
{
    @Override                          // define body of abstract method
    void abst() {
        System.out.println("abstract method define");
    }
    void eat()                         // override eat method
    {
        System.out.println("non abstract override ");
    }
}
public class alloops {             // Main class
    public static void main(String[] args)
    {
        B b=new B();                         // create Object B Class
        abstractA a = new abstractA() {          // create Object of abstract Class
            @Override
            void abst() {
                System.out.println("again abstract");
            }
        };
        a.eat();  //instance of abstract class
        System.out.println(a instanceof abstractA);
        b.abst();
        b.eat();
        a.abst();
    }
}

输出:
非抽象
真,
抽象方法定义
非抽象覆盖
再次抽象

在这种情况下,输出在上面。我想知道这是对还是错。我是否必须创建抽象类的实例?

3 个答案:

答案 0 :(得分:2)

你所做的就是创建一个匿名的内部类。

abstractA a = new abstractA() {          // create Object of abstract Class
        @Override
        void abst() {
            System.out.println("again abstract");
        }
    };

答案 1 :(得分:0)

abstractA a = new abstractA() { 
     @Override
      void abst() {
                System.out.println("again abstract");
      }
};

上面的代码实际上定义了一个扩展抽象类的匿名类。您的代码按预期工作。

答案 2 :(得分:0)

您无法创建抽象类的实例。您正在创建一个匿名内部类的实例,它正在扩展您的抽象类。混乱正在创造,因为这条线 正在回归。

   a instanceof abstractA

instanceof 用于检查对象是否为类的实例子类的实例,或实现特定接口的类的实例。

  

在这种情况下, abstractA 是一个抽象类的实例   子类。

如果使用这些行来确定实例的类类型

,输出将更加清晰
  System.out.println(b.getClass().toString());
  System.out.println(a.getClass().toString());

<强>输出:
类corejava.B
class corejava.alloops $ 1

  

输出的第一行告诉我们    的 B'/强>   是 corejava

包中的 B 类的实例      

第二行告诉 a corejava alloops 第一个匿名内部类($ 1) >