Nói chung, khi overriding, method trong superclass và subclass có cùng tên và parameter. Nhưng về return type, method trong subclass có thể trả về subtype của return type của method trong superclass.
Ví dụ
Nếu quan sát ví dụ sau, super class có method demoMethod() trả về kiểu List. Nếu override method này, method trong subclass có thể trả về kiểu List (của superclass) hoặc subtype của List (return type của method trong super class) như ArrayList, Stack, Vector v.v.
Trong kịch bản này, sub class method trả về ArrayList, subtype của return type của super class là List. Subtype này (ArrayList) gọi là covariant type.
Ví dụ
class Test {
int data = 100;
Test demoMethod() {
return this;
}
}
public class Sample extends Test {
int data = 1000;
Sample demoMethod() {
return this;
}
public static void main(String args[]) {
Sample sam = new Sample();
System.out.println(sam.demoMethod().data);
}
}
Kết quả
1000