接口实例化——匿名内部类

接口实例化——匿名内部类

public Interface IFly {
    void fly();
}

public class Bird {
    public Bird() {
    }

    public void fly(IFly f) {
        f.fly();
    }
}

public class Test {
    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.fly(new IFly() {
            void fly() {
                System.out.println("This is a bird, it's flying");
            }
        });
    }
}

我们学习接口的时候,很明确的有句话接口不能被实例化,这个地方的代码看起来似乎接口IFly被实例化。
其实这段代码的过程是:实例化了一个匿名内部类,然后将这个匿名内部类向上转型为IFly类型。

再给个例子就明白了

public BirdFly implements IFly {
    public BirdFly() {}

    void fly(){
        System.out.println("This is a bird, it's  flying");
    }
}

......

bird.fly(new BirdFly());

你可能感兴趣的:(Java)