以下代码使用Java中的方法覆盖的概念。
package pkg;
import java.util.ArrayList;
import java.util.List;
abstract class SuperClass
{
abstract public ListgetList();
}
final class SubClass extends SuperClass
{
private Listlist=null;
@Override
public ArrayList getList()
{
list=new ArrayList();
list.add("A");
list.add("B");
return (ArrayList) list;
}
}
final public class Main
{
public static void main(String[] args)
{
SuperClass s=new SubClass();
Listlist=s.getList();
for(String str:list)
{
System.out.println(str);
}
}
}
按照约定,方法重写在超类和子类中都使用相同的签名(带有返回类型)。在上面的代码中,getList()方法在SuperClassis
List中的返回类型是,在其子类中,返回类型是ArrayList。方法重写在这里如何工作?
顺便说一下,很明显这ArrayList是List接口的实现,但是编译器在覆盖getList()方法的同时如何处理返回类型?
我应该相信这样的事情吗? 允许重写方法的返回类型为重写方法的返回类型的子类型。