Covariant return type in Java
java
Solution
Yes.
In early java that was not the case, but it was changed in Java 5.0.
You cannot have two methods in the same class with signatures that only differ by return type. Until the J2SE 5.0 release, it was also true that a class could not override the return type of the methods it inherits from a superclass. In this tip you will learn about a new feature in J2SE 5.0 that allows covariant return types. What this means is that a method in a subclass may return an object whose type is a subclass of the type returned by the method with the same signature in the superclass. This feature removes the need for excessive type checking and casting.
The source of this information is no longer available on the interwebs.
Problem
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.