abstract class and anonymous class [duplicate]

你。 提交于 2019-11-27 08:20:53

问题


This question already has an answer here:

  • Creating the instance of abstract class or anonymous class 8 answers
abstract class Two {
    Two() {
        System.out.println("Two()");
    }
    Two(String s) {
        System.out.println("Two(String");
    }
    abstract int  display();
}
class One {
    public Two two(String s) {
        return new Two() {          
            public int display() {
                System.out.println("display()");
                return 1;
            }
        };
    }
}
class Ajay {
    public static void main(String ...strings ){
        One one=new One();
        Two two=one.two("ajay");
        System.out.println(two.display());
    }
}

we cannot instantiate an abstract class then why is the function Two two(String s) able to create an instance of abstract class Two ????


回答1:


It does not create an instance of abstract Two. It creates a concrete, anonymous class that extends Two and instantiates it.

It's almost equivalent to using a named inner class like this:

class One {
    public Two two(String s) {
        return new MyTwo();
    }

    class MyTwo extends Two {
        public int display() {
            System.out.println("display()");
            return 1;
        }
    }
}



回答2:


Because it implements the missing function display(). It returns an anonymous subclass of Two. You can see this if you look at the compiled files. You will have a One$1.class there, which extends Two.class!



来源:https://stackoverflow.com/questions/5154533/abstract-class-and-anonymous-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!