黑马程序员技术交流社区
标题:
什么是协变返回类型
[打印本页]
作者:
王松朝
时间:
2011-7-24 17:35
标题:
什么是协变返回类型
在网上看到这样一句话"java SE5中添加了协变返回类型,它表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型"
没看懂这句话是什么意思,最后的'导出类型'是什么
作者:
匿名
时间:
2011-7-24 18:10
在Java1.4及以前,子类方法如果要覆盖超类的某个方法,必须具有完全相同的方法签名,包括返回值也必须完全一样。
Java5.0放宽了这一限制,只要子类方法与超类方法具有相同的方法签名,或者子类方法的返回值是超类方法的子类型,就可以覆盖。
注意:"协变返回(covariant return)",仅在subclass(子类)的返回类型是superclass(父类)返回类型的extension(继承)时才被容许。[code=java]public class Demo {
public static void main(String[] args) {
A a = new B();
C c = a.display() ;
c.display() ;
}
}
class A {
public C display() {
System.out.println("this is from A!");
return new C();
}
}
class B extends A {
public D display() {
System.out.println("this is from B!");
return new D() ;
}
}
class C {
public void display() {
System.out.println("this is from C!!!");
}
}
class D extends C {
public void display() {
System.out.println("this is from D!!!");
}
}[/code]这个是可以编译通过的。
D继承C重写了display()方法,返回的都是void类型。
B继承A,都写了display()方法,但是类型看似乎不一样,一个返回的是类C,一个是继承了类C的类D,这里就是协变返回了。
结果为:[code=java]this is from B!
this is from D!!![/code]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2