java 协变返回

原创 2013年12月04日 10:03:49

java 协变返回

所谓协变,就是父类和子类保持相同形式的变化。

在java5.0中,只要子类方法与超类方法具有相同的方法签名,或者子类方法的返回值是超类方法的子类型,就可以覆盖。

面向对象语言中,协变返回方法指的是一个子类在覆盖超类的方法的时候,方法的返回值可以被一个“更窄”的类型所替代。

例如:

复制代码
class Collection { 
     Iterator iterator() { ... } 
} 
 
class List extends Collection { 
    @Override  
    ListIterator iterator() { ... } 
}  
复制代码

Iterator函数获得到当前集合的迭代器,在子类中,迭代器有着更确切的表示,所以使用了Iterator的子类ListIterator作为新的返回值。

注意:"协变返回(covariant return)",仅在subclass(子类)的返回类型是superclass(父类)返回类型的extension(继承)时才被容许。


Java之协变返回类型理解和简单实例

开心一笑【早上起来,发现天气越来越冷了,白粽子记得要多包几层叶】提出问题Java中协变返回类型如何理解???解决问题概念导出类(子类)覆盖(即重写)基类(父类)方法时,返回的类型可以是基类方法返回类型...

java 协变式覆盖与泛型重载

整理两篇文章《Java Generics and Collections》读书笔记三:协变式覆盖与泛型重载  与   关于泛型和重载的小问题 《Java Generics and Colle...

Java泛型的协变

在上篇《Java泛型的基本使用》这篇文章中遗留以下问题,即将子类型也能添加到父类型的泛型中,要实现这种功能必须借助于协变。 实验准备   现在在上篇文章展示的Decorator类型的基础上,增加一些...

Java学习:协变数组和类型擦除(covariant array ; type erasure)

数组的协变性数组的协变性(covariant)是指:如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。而泛型是不可变的(invariant),List不会是List 的基类,更不会...

关于Java协变性的思考

Java协变性一、什么是协变性?简而言之,如果A IS-A B,那么A[] IS-A B[]。 举例:现在有类型Person、Employee和Student。Employee 是一个(IS-A) ...

Java 协变数组和类型擦除(covariant array & type erasure)

来源:Linux社区  作者:xsc_c 1、数组的协变性 数组的协变性(covariant)是指: 如果类Base是类Sub的基类,那么Base[]就是Sub[]的...

Java协变数组和类型擦除

1、数组的协变性 数组的协变性(covariant)是指: 如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。 而泛型是不可变的(invariant),List不会是List...

Java——协变数组和类型擦除(covariant array & type erasure)

1、数组的协变性 数组的协变性(covariant)是指: 如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。 而泛型是不可变的(invariant),List不会是List...
  • xsc_c
  • xsc_c
  • 2014年01月08日 21:38
  • 1843

Java 协变数组和类型擦除

1、数组的协变性 数组的协变性(covariant)是指: 如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。 而泛型是不可变的(invariant),List不会是List...
  • dumzp13
  • dumzp13
  • 2016年05月28日 16:11
  • 164

Java——协变数组和类型擦除以及泛型相关知识

近期读到协变数组和类型擦除,涉及相关的泛型和数组的知识不是很了解。所以专门找了资料整理了一下。 1.数组的协变性 数组的协变性(covariant)是指如果sub是base的子类,那么sub[]是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 协变返回
举报原因:
原因补充:

(最多只允许输入30个字)