Possible Duplicate:
abstract class and anonymous class
abstract class Two {
Two() {
System.out.println("Two()");
}
Two(String s) {
System.out.println("Two(String");
}
abstract int display();
}
class One {
public Two two(开发者_StackOverflow中文版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 method Two two(String s) in class One returns an object of abstract class Two
As your question title suggests, you're instantiating an anonymous inner class that extends from Two, not Two itself.
As your title suggests, the method two()
creates an instance of an anonymous class extending Two
(and implementing the abstract
method display()
.
This One
implementation has pretty much the same result (except that the class is named now).
class One {
public Two two(String s) {
return new MyTwo();
}
private static class MyTwo extends Two {
public int display() {
System.out.println("display()");
return 1;
}
}
}
精彩评论