說到繼承,從"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都是這位偉大的祖公生出來的

 

JAVA - super - 繼承    

 

 

 

若不寫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

 

嘛,以上是研究書本的心得記錄,若有精進,擇日再行補充

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    文章標籤
    JAVA
    全站熱搜
    創作者介紹
    創作者 Master Sarge 的頭像
    Master Sarge

    Master Sarge 的部落格

    Master Sarge 發表在 痞客邦 留言(0) 人氣()