接口类型作为返回类型

时间:2022-09-25 16:09:43

接口类型作为返回类型,返回的实际上是实现了这个接口的一个对象。这是典型的多态应用,方法应返回基类的引用

public interface AAA {
    public AAA a();
}
public class BBB implements AAA {
        public AAA a(){ return new BBB()};
        public  b(){};

}

 

上边那个例子。有个AAA接口,里边有个方法 a,返回值是AAA接口类型。有个BBB方法实现了AAA接口,实现了了a方法,另外又有一个b方法,a方法里返回一个BBB实例。
问题是测试通过,但返回的BBB实例不能调用方法b,b方法是BBB的方法,怎么就不能调用了呢?

原因呢,就是这个是父类引用指向子类,也就是说你虽然在BBB的a方法里new了一个BBB对象,但是BBB是实现了AAA的,而且a的返回类型是AAA,也就是说你现在a里new的BBB对象是被一个AAA的引用指向,所以只能调用AAA的方法,如果要调用BBB的方法就要强制转换类型

返回的实例是BBB。但是引用类型是AAA。
相当于AAA b = new BBB();
这样就不能b.b();
因为b的引用类型是AAA。AAA方法里是没有函数b()的

这就好比
Object  o = new Worder();
o.doJob();是不行的
因为Object对象里没有doJob的方法

典型例子参见 IEnumerable 和 IEnumerator