The following code uses the concept of method overriding in 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);
}
}
}
By convention, method overriding uses the same signature (with return type) in both super class and subclass. In the above code, the return type of the getList() method in the SuperClass is List and in its subclass the return type is ArrayList. How does method overriding work here?
By the way, it’s obvious that ArrayList is an implementation of the List interface but how does the compiler treat the return type here while overriding the getList() method?
Should I believe something like this… The return type of the overridden method is allowed to be a subtype of the overridden method’s return type.
Yes.
In early java that was not the case, but it was changed in Java 5.0.
The source of this information is no longer available on the interwebs.