เพิ่งจะรู้จัก Covariant Return Type ใน Java 5.0
posted on 13 Dec 2004 11:29 by somkiatเพิ่งจะรู้จัก Covariant Return Type เมื่อสัปดาห์ที่แล้วเพื่อนร่วมงานมาถามผมเกี่ยวกับ java ครับว่า code ข้างล่างนี้สามารถ compile และ run ได้หรือไม่ครับ
class Base {
public Base getObject()
{
return new Base();
}
}
class Sub extends Base {
public Sub getObject() {
return new Sub();
}
}
public class Test {
public static void main(String[] args) {
Base obj = new Sub();
System.out.println(obj.getObject()); }
}
จาก code ดังกล่าวนี้ผมแน่ใจได้เลยว่าทุกๆ คนจะตอบไปได้เลยว่าไม่สามารถ compile ผ่าน เนื่องจากว่าผิดหลักการของการ overriding method ใน class Sub ใช่หรือเปล่าครับ แต่ว่ามันไม่ใช่ใน Java 5.0 ครับ เนื่องจากใน version 5.0 นี้จะเพิ่มความสามารถ Covariant Return Type ไปครับ
ดังนั้น code ข้างต้นจะสามารถ compile และ run โดยจะเรียก getObject() method ของ Class Sub ใช่หรือเปล่าครับ
คำถามที่น่าจะตามมาคือแล้ว Covariant Return Type นี้ทำมาเพื่ออะไร จากคำกล่าวของทาง sun นั้นคือ เพื่อตัดการ check ชนิดของข้อมูลและการ cast ในขณะ runtime ครับ เนื่องจากใน java 5.0 นี้จะพยายามไม่ให้มี runtime error เกิดขึ้นมา ยกตัวอย่างของ Generic ซึ่งจะพูดถึงในครั้ง ต่อๆ ไปครับ
แก้ไขเมื่อ 13/12/2547 15:28:05
แก้ไขเมื่อ 13/12/2547 15:28:36

#1 By T!D on 2004-12-13 16:18