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));
}
}
執行結果:


沒有留言:
張貼留言