抽象类和匿名类

时间:2011-03-01 12:50:50

标签: java

  

可能重复:
  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(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());
    }
}

我们无法实例化一个抽象类,那么为什么方法中的方法二二(String s)返回抽象类的对象两个

2 个答案:

答案 0 :(得分:1)

正如你的问题标题所暗示的那样,你实例化的是一个匿名的内部类,它扩展自两个,而不是两个。

答案 1 :(得分:0)

正如您的标题所示,方法two()创建了一个扩展Two的匿名类的实例(并实现了abstract方法display()

这个One实现具有几乎相同的结果(除了现在命名该类)。

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