下面的代码使用了Java中的方法重写概念。
按照惯例,方法重写在超类和子类中使用相同的签名(带返回类型)。在上述代码中,
顺便提一下,显然
我应该相信这样的说法吗...“被重写方法的返回类型允许是被重写方法返回类型的子类型。”
package pkg;
import java.util.ArrayList;
import java.util.List;
abstract class SuperClass
{
abstract public List<String>getList();
}
final class SubClass extends SuperClass
{
private List<String>list=null;
@Override
public ArrayList<String> getList()
{
list=new ArrayList<String>();
list.add("A");
list.add("B");
return (ArrayList<String>) list;
}
}
final public class Main
{
public static void main(String[] args)
{
SuperClass s=new SubClass();
List<String>list=s.getList();
for(String str:list)
{
System.out.println(str);
}
}
}
按照惯例,方法重写在超类和子类中使用相同的签名(带返回类型)。在上述代码中,
SuperClass
中的 getList()
方法的返回类型为 List
,而在其子类中返回类型为 ArrayList
。那么这里的方法重写是如何工作的呢?顺便提一下,显然
ArrayList
是 List
接口的一个实现,但是编译器在重写 getList()
方法时如何处理返回类型呢?我应该相信这样的说法吗...“被重写方法的返回类型允许是被重写方法返回类型的子类型。”
SubClass.list
声明为List
(而不是ArrayList
)。 - Michael Brewer-DavisSubClass
而不是将其视为SuperClass
时,这可能会使事情更加美好。 - Brendan LongSubClass.list
存在。 - emory