【问题标题】:abstract class force instaniation java [duplicate]抽象类强制实例化java [重复]
【发布时间】:2018-04-15 07:40:33
【问题描述】:

我们知道在 java 中不能创建抽象类的实例。 但是,这行得通:

public abstract class MyAbstract 
{
    int num  = 10;
}
//and in main class

    public static void main(String[] args) {        
       MyAbstract abstractObject = new MyAbstract() {};
       System.out.println(abstractObject.num);       
    }

输出: 跑: 10

所以我们可以吗? 简而言之,这里发生了什么?

【问题讨论】:

标签: java abstract rules


【解决方案1】:

语法

new X(...) { ... }

实例化一个临时的匿名类,扩展/实现名为 X 的类/接口。

在您的情况下,抽象类拥有它所需要的一切,没有抽象方法。因此,派生类不需要实现任何缺失的方法。

如果您向抽象类添加抽象方法,该示例将不再有效。要使其再次工作,您必须在 { ... } 部分中实现该方法。

public abstract class MyAbstract 
{
    int num  = 10;
    abstract void f();
}

public static void main(String[] args) {        
    MyAbstract abstractObject = new MyAbstract() {
        void f() {
            ...
        }
    };
    System.out.println(abstractObject.num);       
}

此外,您可以使用语法的 () 部分将参数传递给扩展基类的构造函数:

public abstract class MyAbstract 
{
    MyAbstract(int argument) {
        ...
    }
    int num  = 10;
    abstract void f();
}

public static void main(String[] args) {        
    MyAbstract abstractObject = new MyAbstract(5) {
        void f() {
            ...
        }
    };
    System.out.println(abstractObject.num);       
}

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多