最近看java编程思想看到协办返回类型有点迷糊,百度知道里有位兄弟总结挺好,在这分享下:
在Java1.4及以前,子类方法如果要覆盖超类的某个方法,必须具有完全相同的方法签名,包括返回值也必须完全一样。
Java5.0放宽了这一限制,只要子类方法与超类方法具有相同的方法签名,或者子类方法的返回值是超类方法的子类型,就可以覆盖。
注意:"协变返回(covariant return)",仅在subclass(子类)的返回类型是superclass(父类)返回类型的extension(继承)时才被容许。
举例:
=====================================
class Base{
public Object OverrideredFunction(){
return new Object();
}
}
class Inherit extends Base{
//String死Object的子类,所以可以这么写
@Override public String OverrideredFunction(){
return "Nice!";
}
}
=====================================
class Base{
public String OverrideredFunction(){
return "NO!";
}
}
class Inherit extends Base{
//String和Integer虽然都是Object的子类
//但这么写的话编译错误
@Override public Integer OverrideredFunction(){
return new Integer(10);
}
}
=====================================
另外,实践表明,就算返回的两个类继承自同一个interface,也无法进行协变。
分享到:
相关推荐
在面向对象程序设计中,协变返回类型指的是子类中的成员函数的返回值类型不必严格等同于父类中被重写的成员函数的返回值类型,而可以是更"狭窄"的类型
NULL 博文链接:https://capricorn-lu.iteye.com/blog/2348956
开发案列优质学习资料资源工具与案列应用场景开发文档教程资料
从 软 件的 设 计 风 格 、 设计 方 法 、 设 计 目 标 到 设 计 过 程 ,都 会 产 生 彻 底 的 变 革 ,"甚 至 会改 变 此 星 球 的 生活 方 式 "。 在 这 次 会 上 ,Java的 创 始 人 之 一 James Gosling 说 :...
协变返回类型 格式化输出 静态导入 并发实用程序 集合框架增强 下载 () 并解压二进制分发文件Retrotranslator-_n.n.n_-bin.zip ,其中nnn是最新的 Retrotranslator 版本号。 使用 Java 5.0 或 Java 6 编译您的类并将...
实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252 实例98 动物搭配(泛型) 253 实例99 人员信息(枚举类型) 256 实例100 printf()用法 260 实例101 使用ProcessBuilder调用外部命令 263 实例102 ...
多态(polymorphism) “多态”理解 再论向上转型 多态内部机制 正确使用,私有、静态方法及域与多态关系 构造器-多态 协变的返回类型(Covariant return types) 用继承进行设计(纯继承与扩展、向下转型)
第一部分:声明、初始化、和作用域。 定义类、内部类、静态类、接口、枚举。...正确重写和重载方法并识别方法合法的返回值,包括协变返回。 为类及层次类编写构造函数,知道默认构造函数的行为,实例化类及内部类
返回类型相同或协变 使用 @Overrride 注释的好习惯 解析多个继承方法的规则: 实例方法优于接口默认方法 已经被其他候选者覆盖的方法将被忽略。 您不能使用实例/静态方法覆盖静态/实例方法。 命名约定:小写或驼峰式...
方法必须具有相同的返回类型或其协变量。 方法不能限制更多的访问,但可以更改为更广泛的访问修饰符(如果父 --> 保护然后子 --> 不允许私有)(如果父 --> 保护然后子 --> 允许公共)。 方法不得抛出新...
返回类型必须是协变的,即。 相同或更多限制(父返回的子类) 如果抛出任何受检异常,则只能抛出相同或更严格的异常。 未经检查的异常是免费游戏。 此外,可以跳过抛出相同的异常。 没有新的或更广泛的。 超载 不同...
18.5.1 协变接口 341 18.5.2 逆变接口 343 第18章快速参考 345 第19章 枚举集合 347 19.1 枚举集合中的元素 347 19.1.1 手动实现枚举器 348 19.1.2 实现ienumerable接口 352 19.2 使用迭代器来实现枚举器 354...
不需要读取支持(canRead方法应该只返回false)。 通过MVC命名空间配置ContentNegotiationViewResolver。 添加两种类型的消息转换器:新实现的application / pdf http消息转换器。 Jackson JSON消息转换器。 使用...