public class Shape { public double x=5, y=10; public double r=10; public void draw() { System.out.println("圖形繪畫"); } }類別檔: Rectangle.java
public class Rectangle extends Shape{ public void draw() { System.out.println("矩形面積 :" + x * y); } public double area(double x, double y){ return x * y; } }若測試時,父類別欲參考子類別新增加的資料或方法時,會有什麼情況發生?
類別檔: ShapeTest.java
public class ShapeTest { public static void main(String[] args) { Shape obj = new Rectangle(); obj.draw(); System.out.println("Area: " + obj.area(3.0, 8.0)); } }此時編譯仍然會成功,但因 Shape 父類別沒有定義 area() 函數,這函數無法被 Shape 物件參照(reference),而會產生錯誤
父類別變數要參考到子類別新增加的資料或方法,需將父類別變數的資料形態,轉換成其子類別的資料形態。上面程式修改如下:
public class ShapeTest { public static void main(String[] args) { Shape obj = new Rectangle(); obj.draw(); System.out.println("Area: " + ((Rectangle) obj).area(3.0, 8.0)); } }
執行結果:
沒有留言:
張貼留言