組合語法:
將對(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 類:類不可繼承。