以下代码使用 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);
}
}
}
按照惯例,方法覆盖在超类和子类中使用相同的签名(带有返回类型)。在上面的代码中,getList()
方法的返回类型为SuperClass
is List
,在其子类中的返回类型为ArrayList
。方法覆盖如何在这里工作?
顺便说一句,很明显这ArrayList
是List
接口的实现,但是编译器在覆盖getList()
方法时如何处理这里的返回类型?
我是否应该相信这样的事情......被覆盖方法的返回类型被允许是被覆盖方法的返回类型的子类型。