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();
}
}
输出:
非抽象
真,
抽象方法定义
非抽象覆盖
再次抽象
在这种情况下,输出在上面。我想知道这是对还是错。我是否必须创建抽象类的实例?
答案 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) >