โดยทั่วไป ในการ override เมธอดในซุปเปอร์คลาสและซับคลาสจะมีชื่อและพารามิเตอร์เหมือนกัน แต่เมื่อมาถึงชนิดการคืนค่า เมธอดในซับคลาสสามารถคืนค่า subtype ของชนิดการคืนค่าของเมธอดในซุปเปอร์คลาสได้
ตัวอย่าง
หากคุณสังเกตตัวอย่างต่อไปนี้ ซุปเปอร์คลาสมีเมธอดชื่อ demoMethod() และคืนค่าประเภท List หากเรา override เมธอดนี้ เมธอดในซับคลาสสามารถคืนค่าประเภท List (ซึ่งอยู่ในซุปเปอร์คลาส) หรือ สามารถคืนค่า subtype ของ List (ชนิดการคืนค่าของเมธอดในซุปเปอร์คลาส) เช่น ArrayList, Stack, Vector เป็นต้น
ในสถานการณ์นี้ เมธอดของซับคลาสคืนค่า ArrayList ซึ่งเป็น subtype ของชนิดการคืนค่าของซุปเปอร์คลาสคือ List ชนิดย่อยนี้ (ArrayList) เรียกว่า covariant type
ตัวอย่าง
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); } }ผลลัพธ์
1000