天天看點

java中内部類 、object類 、final關鍵字、修飾符、多态

繼承兩種方式:

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關鍵字

  1. 修飾屬性—–>常量;
  2. 修飾方法—–>最終方法,不能被子類重寫 但可以被子類調用;
  3. 修飾類———>最終類,不能被繼承。

修飾符+通路修飾符

修飾符: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,因為内部類不能在使用完外部類的變量後将其銷毀,即當方法中的變量被回收後導緻局部内部類引用時找不到。