我为此道歉,我确信每个人都厌倦了抽象的课堂问题。
规则/事实:无法实例化抽象类。
我遇到了一个令我困惑的例子:
public abstract class AbstractClass {
private String name;
public AbstractClass(String name)
{
this.name = name;
}
public String getName(){
return this.name;
}
}
public class Test {
public static void main(String [] args)
{
//breaking rule
AbstractClass temp = new AbstractClass("name") {
};
System.out.println(temp.getName());
}
}
答案 0 :(得分:3)
如果这是java,那么你在这里创建一个扩展这个抽象类的匿名类。由于没有抽象方法,因此您不需要实现任何方法
答案 1 :(得分:0)
OP:无法初始化Abstract类。它必须扩展到由jvm初始化的具体类。您可以使Test扩展AbstractClass,然后将名称传递给它,但只是在抽象上尝试new将无效。
编辑:我没注意到初始化程序上的大括号。以上答案是正确的new Abstract(){};
确实创造了一个内在的异形。
答案 2 :(得分:0)
此处的关键是new AbstractClass("name")
之后的括号。
您正在做的是匿名内部类的实例化。实例化匿名类是不。你不违反任何规则。创建匿名内部类也可以使用非抽象类来完成。
这意味着每次代码的这一部分运行时,您不仅要创建一个类的新对象,而且实际上是在创建一个新类。