《Thinking In Java 》復(fù)用類

組合語法:

將對(duì)象(基本數(shù)據(jù)類型)的引用置于新類中。

數(shù)據(jù)的初始化方式:

1.在定義對(duì)象的地方,意味著它們能夠在構(gòu)造器被調(diào)用之前被初始化。

2.再類的構(gòu)造器中

3.在使用這些對(duì)象前。

4.使用實(shí)例初始化

?

繼承語法:

當(dāng)創(chuàng)建一個(gè)類的時(shí)候總是在繼承,除非明確指出從類中繼承,否則都在從Object類中隱試的繼承。

繼承中并不一定非要使用基類中方法,也可以添加自己的方法。

1、初始化基類

??? 基類的構(gòu)造器具有執(zhí)行基類初始化的能力。

2.帶參數(shù)的構(gòu)造器:

一個(gè)類中如果沒有默認(rèn)的基類構(gòu)造器,或者想調(diào)用一個(gè)帶參的基類構(gòu)造器,就必須使用super關(guān)鍵字顯示的調(diào)用基類構(gòu)造器的語句,并且配以適當(dāng)?shù)膮?shù)列表。

class Animal {
Animal(int i){
System.out.print(i);
}
}

class Cat extends Animal {
Cat(int i) {
super(i);
System.out.print(i);
}
}

class Food extends Cat {
Food() {
super(11);
System.out.print("123456");
}
static void main(){
Food f=new Food();
}
}

?

?

代理:

組合和繼承的中庸之道。

我們將一個(gè)成員對(duì)象置于所需要構(gòu)造的類中(就像組合),但與此我們?cè)谛骂愔斜┞读嗽摮蓡T對(duì)象的所有方法(就像繼承)

class SpacShipControll{
void up(int i){}
void down(int i){}
}
public class SpacShipDelegation extends SpacShipControll{
private String name;
private SpacShipControll spacShipControll=new SpacShipControll();
public SpacShipDelegation (String name){
this.name=name;
}
public void down(int i){
spacShipControll.down(i);
}
public void up(int i){
spacShipControll.up(i);
}
public static void main(){
SpacShipDelegation spacShipDelegation=new SpacShipDelegation("new");
spacShipDelegation.up(100);
}

}

可以看到,運(yùn)用代理的方式如何調(diào)用方法傳遞數(shù)據(jù)給spacShipControll對(duì)象。

盡管java不支持代理,但是很多開發(fā)工具卻支持代理,例如,JetBrains Idea IDE就可以自動(dòng)生成上面例子

?

Protect關(guān)鍵字:

就累用戶而言,這是private的,但對(duì)于任何繼承此類的導(dǎo)出類,或者其他任何一個(gè)包內(nèi)類來說,他確實(shí)可以訪問的。(protected也提供了包內(nèi)訪問的權(quán)限)

向上轉(zhuǎn)型:

為新類提供方法,并不是繼承中重要的方面,最重要的是,用來表現(xiàn)新類和基類之間的關(guān)系(新類是基類的一種現(xiàn)有方式)

由于向上轉(zhuǎn)型是從一個(gè)較專用型的類向通用性了的類轉(zhuǎn)型。所以總是很安全的,他可能會(huì)存在很多的方法,向上轉(zhuǎn)型類接口中唯一可能發(fā)生的事情就是 方法的丟失。

?

?

final關(guān)鍵字:

final的三種情況:數(shù)據(jù)、方法和類。

final 數(shù)據(jù):告知編譯器這塊數(shù)據(jù)是恒定不變的。final 修飾基本類型時(shí)很好理解,修飾對(duì)象的時(shí)候又怎么樣呢?效果是使得引用不可變,即無法指向另一個(gè)對(duì)象,但對(duì)于正在指向的對(duì)象自身的內(nèi)容是可以改變的。

final 方法:用來鎖定方法,確保方法不會(huì)被覆蓋。在早期 final 方法還可用來提升效率,但現(xiàn)在已經(jīng)不提倡了。所以,只有在想明確禁止覆蓋的時(shí)候,才將方法設(shè)置為 final。
private 方法默認(rèn)隱式指定為final, 無法被繼承;如果子類定義相同名稱和參數(shù)的方法等同于生成了新的方法,沒有覆蓋父類設(shè)置了final的方法。

final 類:類不可繼承。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Java復(fù)用類 組合與繼承 組合:在新的類中產(chǎn)生現(xiàn)有類的對(duì)象。 繼承:按照現(xiàn)有類的類型來創(chuàng)建新類,無需改變現(xiàn)有類的...
    RonaldoWang閱讀 330評(píng)論 1 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評(píng)論 18 399
  • 第一章 對(duì)象導(dǎo)論 對(duì)象具有狀態(tài)、行為和標(biāo)識(shí)。這意味著每一個(gè)對(duì)象都可以擁有內(nèi)部數(shù)據(jù)和方法,并且每一個(gè)對(duì)象都可以唯一地...
    niaoge2016閱讀 854評(píng)論 0 0
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,540評(píng)論 1 51
  • 本章將會(huì)介紹 存儲(chǔ)屬性的初始賦值自定義構(gòu)造過程默認(rèn)構(gòu)造器值類型的構(gòu)造器代理類的繼承和構(gòu)造過程可失敗構(gòu)造器必要構(gòu)造器...
    寒橋閱讀 782評(píng)論 0 0