說到繼承,從"extends"這個關鍵字入手
class A extends B
表示 class A 繼承 class B 裡頭所有非 private 的 [屬性]、[方法]
換個說法是把class B的 [類別成員] 囊括進來
在宣告 [實體(新)物件] 後
我們可以讓物件使用class B所宣告的 [類別成員]
當然
一旦有了實體物件出現後,實體物件就擁有類別成員的東東
就稱為[實體成員]
舉個例:
public class B{
public Big = 1;
public Fat = 0;
private Sex = 1;
public eat(){
System.out.println("eat will strong you");
};
}
class B 裡頭
有 Big,Fat,Sex 三個屬性
有 eat 這個方法
當 class A extends B
以及宣告 A littleA = new A();
littleA.Big
littleA.Fat
littleA.eat()
以上就是 littleA 這個實體物件成員啦
Sex 因為是private 所以沒有辦法繼承
再來談談constructor 和super
一個 class 的產生,一定要有constructor
若沒有看到,只是沒有看到而已啦,系統幫你使用自動默認
constructor 也就是建構子
它的使用有兩個意義
1. 當物件產生時,就可以首先指定做某個動作,用參數啦,function之類的等等,反正跟物件綁在一起。當你要new 出這個物件,就一定也順道做這些 constructor 裡指定的動作。
2. 當小孩出生的時候,老爸也要知道吧。老爸需要知道小孩的一些訊息,( 老爸要先知道你是不是我的種 )
可是像我製造老爸時 (class B),老爸的老爸是誰?
是 java.lang.Object 這個類別,恩,你寫的code都是這位偉大的祖公生出來的
若不寫constructor,系統會幫你加,當然contructor的名稱都是跟所在class一樣,差別只是在於後面的參數傳遞有關,是無參數傳入呢? 是不同型態的參數呢?
constructor可以不只一個,這用了override的觀念
系統幫你加的
會是無參數傳入的constructor
裡頭僅有一行code
super()
super()的意思是,去使用老爸 無參數傳入的construtor
即使你是自己建構constructor,而不是讓系統默認
當物件產生時,他還是去找老爸的 無參數傳入的construtor
老爸的 無參數傳入的construtor
所以當老爸沒有無參數傳入的construtor時就GG啦
像我上面程式碼 把老爸的無參數constructor註解掉一樣
然而,這個動作也是有意義
也是讓老爸知道你是他的種的動作
在左邊的code,因為我自己建立一個有參數傳遞的constructor,所以也就沒有有默認的
無參數傳遞的consturctor
那怎麼辦?
就在兒子的super(),括號中填入父類別有參數傳遞的constructor,要傳入的參數就好啦
指引系統找到正確的constructor
"喂!老爸!告訴你我的鼻子長得跟你一樣,我是你的種!"
super 是指向父類別的動作
反之,this就是自己指向自己的動作
當然若對constructor來說
用this自己指自己的建構子沒什麼意思
super和this有個要點
就是一定要出現在 { 下的第一行
所以有super就沒this,有this就沒有super
嘛,以上是研究書本的心得記錄,若有精進,擇日再行補充