老師請問一下: 1. 父類別變數存取子類別物件的成員目的為何? 2. abstract method 問題 public class Abstruct { public static void main(String args[]) { CRetangle obj1 = new CRetangle(5,10); obj1.setcolor("Blue"); obj1.show(); CCircle obj2 = new CCircle(2.0); obj2.setcolor("Red"); obj2.show(); } } abstract class CShap { protected String color; public void setcolor(String str) { color = str; } public abstract void show(); ===================================================>此指令不寫還是可以正常執行,那為何還要宣告此abstract method } class CRetangle extends CShap { protected int width,height; public CRetangle(int w,int h) { width = w; height = h; } public void show() { System.out.println("color = " + color); System.out.println("area = " + (width * height)); } } class CCircle extends CShap { protected double r; public CCircle(double rad) { r = rad; } public void show() { System.out.println("color = " + color); System.out.println("area = " + (3.14*r*r)); } } A: 父類別變數存取子類別物件的成員??? 可能是你會錯意了,父類別不可能知道子類別有什麼成員的. 至於抽象方法的用意,這個說來話長. 首先要知道override及多型的用意. 從你上面的程式只看到override但看不到多型. 把CRetangle obj1 = new CRetangle(5,10); 改成CShap obj1 = new CRetangle(5,10); 把CCircle obj2 = new CCircle(2.0); 改成CShap obj2 = new CCircle(2.0); 就知道 public abstract void show(); 省略有沒有一樣了 抽象類別(父類別)定義抽象方法, 主要是讓子類別來override這個抽象方法, 也就是說,不管多少個子類別來繼承這個抽象類別, 都一定有show()方法. 換句話說,抽象類別寫的抽象方法,是在定義一個規範出來, 其下的子類別一定依這個規範來做(override). 介面也是一樣的道理. 如同執行緒中的implements Runnable介面是一樣的意思, 一定要override run()方法才行. |
2012年8月4日 星期六
[問題] inheritance and abstract class
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言