繼承兩種方式:
Has—a: 類中有另一個類的應用
Is—a:extends
多态
1. 基本資料類型:自動轉換, 強制轉換
2. 引用資料類型:向上轉型,向下轉型(必須先向上轉型)
A. 向上轉型:子類的位址指派給父類
注意:父類隻能使用自己類中的方法,不能使用子類中的方法。如果子類重寫了父類方法,則父類調用的是子類重寫後的方法。-這才是向上轉型的價值。
好處:
1. 擴大參數、屬性範圍;
2. 若父類是一接口,通過這種方法獲得自身對象。:接口作為類的參數
B. 向下轉型: 先向上轉型後才能向下轉型。
錯誤:Student p=new Person ():
//具體被調用的方法
Publicvoid play(Person p): Person是一個接口或者抽象類
具體調用流程:
Person p=new Studen(); //向上轉型
Play(p);
//具體play方法
public void play(Person p)
{
//此處需要調用student中的方法,必須向下轉型
if(Student instanceOf Person){
Student s=(Student)p;
p.work();
}
}
final關鍵字
- 修飾屬性—–>常量;
- 修飾方法—–>最終方法,不能被子類重寫 但可以被子類調用;
- 修飾類———>最終類,不能被繼承。
修飾符+通路修飾符
修飾符:abstract final static
通路修飾符:private public protected default
普通類:
A. 通路修飾符:public 預設;
B. 修飾符:abstract ,fina;
屬性:
通路修飾符:4種;
修飾符:static、final;
方法:
通路修飾符:4種;
修飾符:abstract final static;
接口:
通路修飾符:public 預設(不寫);
接口中方法的建立:
通路修飾符、修飾符二者全都出現或者全部不出現或者二者出現其一。
Object類
1.hashcode():把對象的位址轉換成哈希嗎值(整形值);
2. toString():列印對象時的位址的字元串。一般子類都要重寫此方法。
3. getClass():得到運作時類;
4. equals():即比較位址也比較内容,在子類中需要重寫。
5. clone():建立傳回對象副本;
6.finalize():垃圾回收.
内部類
顧名思義,在一個類的内部有定義了一個類。
種類:成員内部類,靜态内部類,局部内部類,匿名内部類。
A. 成員内部類:
類之内方法之外定義的内部類。可以将其了解為一種成員,故其通路修飾符是4種。
a.擷取内部類:
1. 外部類外部類對象=new 外部類;
2. 外部類.内部類 内部類對象=外部類對象.new 内部類;
Person.Heart heart=person.new Heart();
b.擷取匿名内部類
1.在外部類中定義一個方法getInstance()傳回内部類執行個體
2.直接使用外部類執行個體去調用getInstance得到内部類執行個體
Person.Heart heart1=person1.getInstance()
注意:同名屬性使用執行個體:
System.out.println(“局部變量name:”+name);
System.out.println(“内部類屬性:”+this.name);
System.out.println(“外部類屬性:”+Person.this.name);//Person.this:外部類對象
B. 靜态内部類:
使用static修飾的内部類
注意:
靜态内部類不能使用非靜态的外部屬性和方法
建立對象方法:不依賴外部類
1. Person.Heart heart1=new Person.Heart () //直接new
2.也可以通過定義getInstance的形式建立。
C. 局部内部類:
定義在方法中的内部類。
注意:
1. 可以使用外部類的屬性和方法,包括私有屬性。
2. 如果要使用方法中的局部變量,則該變量必須是final,因為内部類不能在使用完外部類的變量後将其銷毀,即當方法中的變量被回收後導緻局部内部類引用時找不到。