給未來的裕翔
java有個重點是多型
這可是我當初自修完全看不懂的呢^^
汽車是車
所以我可以宣告一個車的參考指向汽車物件
同理, 經理也是員工
Employee e = new Manager();
這就是把經理找來當Employee用
那如果現在Employee有getInfo()方法
Manager裡面有覆寫getInfo()方法
試問, 我把經理當員工用
e.getInfo()是呼叫誰的getInfo() ?
經理的^^
老師的超棒例子!
"把所有員工找來報告, 經理報告的內容會和清潔工一樣嗎?"
那如果有個attribute是經理獨有, Employee沒有
ex: department
那我是不能存取它的department的
不過不能存取不代表他消失
老師的超棒例子
在我們面前是大師的他
回家變兒子的老子
此時的他依然擁有java知識
不過沒要教他兒子罷了
--------------------------------------------------
多型的好處, 異質集合
我可以宣告一個Employee陣列
裡面存放Manager, Engineer這些也算是員工的相異子類別
--------------------------------------------------
如果父類別有個方法要在子類別裡被覆寫
那麼它的存取控管必須大於等於父類別
也就是說, 如果在父類別裡是public的成員方法
在子類別裡它不能是private
因為在編譯器檢查的時候
是以父類別方法來檢查, 實際執行卻是執行子類別的方法
萬一上例在子類別宣告成private
那就會是"檢查通過, 但實際不能用" ^^
--------------------------------------------------
介於public和private中間還有兩個: default和protected
protected的方法可以被同package和子類別存取
default的方法可以被同package存取
什麼時候會用到protected呢
老師的超棒實務例子
"當我在規劃需要哪些方法時 先寫一個空的放在那"
"此時我不希望它被存取 因為是空的"
"之後被分配的人去把它實作 再把變protected改成public就可以被他人使用了"
"還有很多機會會用到啦 不過現在的你大概只能聽懂這個"
太棒了 被強者嗆就是爽^^
--------------------------------------------------
a instanceof b回傳boolean
可以想成判斷是否"a is b"
如果現在用Employee e參考指向Manager
e.getInfo()的話, 是Manager自己的getInfo()
可是如果想要使用Manager自己新增的playGolf()呢?
要先轉型回子類別Manager m = (Manager) e;
--------------------------------------------------
比較一下, 對陣來說, 它有個length成員變數
對字串來說, 它有個length()成員方法
--------------------------------------------------
子類別可以自動變父類別
父類別需要casting才可以變子類別
如果現在A是父類別, B和C是各自繼承A的兄弟類別
A a = new B();
B b = (B) a;
這樣ok
A a = new A();
B b = (B) a;
編譯ok, 執行失敗
那現在要怎樣才可以把B轉型成C呢?
B b = new B();
A a = b;
C c = (C) a;
這樣編譯會過喔^^
當然, 執行會錯啦~
--------------------------------------------------
Object o = new Object[n];
雖然看似tricky
但是這是合法的喔^^
因為陣列也是一種物件
如果現在Object o = new int[1]
裡面的element會不初始化成0
怎麼取值? 轉型!
if ( o isinstanceof int [] )
int[] ia = (int
No comments:
Post a Comment