创建抽象类或匿名类的实例

Dro*_*nja 12 java syntax class

在这段代码中,它是创建抽象类或匿名类的对象吗?请告诉我.我在这里有点困惑.

public abstract class AbstractDemo {

    abstract void showMessage();
    abstract int add(int x,int y);

    public int mul(int x,int y){
        return x+y;
    }


    public static void main(String[] args) {
        AbstractDemo ad = new AbstractDemo() {

            @Override
            void showMessage() {
                // TODO Auto-generated method stub

            }

            @Override
            int add(int x, int y) {
                // TODO Auto-generated method stub
                return 0;
            }
        };

        System.out.println(ad.mul(10, 12));
        System.out.println(ad.getClass());
    }

}
Run Code Online (Sandbox Code Playgroud)

Vin*_*ele 33

您创建一个扩展抽象类的匿名类.

在下面的剪辑中,您正在扩展AbstractDemo并提供其抽象方法的实现.

new AbstractDemo() {
    @Override
    void showMessage() {
        // TODO Auto-generated method stub
    }

    @Override
    int add(int x, int y) {
        // TODO Auto-generated method stub
        return 0;
    }
};
Run Code Online (Sandbox Code Playgroud)


Shr*_*ari 5

您不能创建抽象类的实例。
您可以创建扩展抽象类的类的实例。

抽象类的全部意义在于它是抽象的——您已经定义了一个接口而不是一个实现。如果没有实现,实例化类不会产生有意义或有用的结果。如果实例化该类的对象确实/有意义,那么您根本不想首先使用抽象类。

您可以将匿名类概念用于如下所示的实例:

AbstractDemo abstractDemo  = new AbstractDemo() {
            @Override
            void showMessage() {
                // TODO Auto-generated method stub
            }
            @Override
            int add(int x, int y) {
                // TODO Auto-generated method stub
                return 0;
            }
        }; 
Run Code Online (Sandbox Code Playgroud)


Pio*_*zyk 5

以下是这段简短而无辜的代码中发生的事情:

AbstractDemo ad = new AbstractDemo() {

            @Override
            void showMessage() {
                // TODO Auto-generated method stub

            }

            @Override
            int add(int x, int y) {
                // TODO Auto-generated method stub
                return 0;
            }
        };
Run Code Online (Sandbox Code Playgroud)
  1. 定义了新类(没有名称,所谓的匿名类)
  2. 这个新类扩展了AbstractDemo
  3. AbstractDemo在这个新类中重写了抽象方法
  4. 创建了这个新类的新实例并将其分配给ad变量

anonymous classes这里阅读有关Java的更多信息.

  • 精湛的解释。 (2认同)