这个简单的例子打破了抽象类规则?

时间:2013-03-10 15:43:55

标签: java abstract-class

我为此道歉,我确信每个人都厌倦了抽象的课堂问题。

规则/事实:无法实例化抽象类。

我遇到了一个令我困惑的例子:

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());
    }
}

3 个答案:

答案 0 :(得分:3)

如果这是java,那么你在这里创建一个扩展这个抽象类的匿名类。由于没有抽象方法,因此您不需要实现任何方法

答案 1 :(得分:0)

OP:无法初始化Abstract类。它必须扩展到由jvm初始化的具体类。您可以使Test扩展AbstractClass,然后将名称传递给它,但只是在抽象上尝试new将无效。

编辑:我没注意到初始化程序上的大括号。以上答案是正确的     new Abstract(){};确实创造了一个内在的异形。

答案 2 :(得分:0)

此处的关键是new AbstractClass("name")之后的括号。

您正在做的是匿名内部类的实例化。实例化匿名类是。你不违反任何规则。创建匿名内部类也可以使用非抽象类来完成。

这意味着每次代码的这一部分运行时,您不仅要创建一个类的新对象,而且实际上是在创建一个新类。