天天看點

堆棧、構造函數、繼承、多态等總結

 1.Import 用來引入其他包中你所需要的類,但不能找到沒有包的類。

2.堆(Heap)和棧(Stack)的差別:(它們均由JVM虛拟機管理配置設定)

         堆 用來存放所有的對象,包括所有的執行個體變量,其空間在程式運作時配置設定

        棧 用來存放方法調用和局部變量

                         name  age

Student  s0 = new Student(“xiaowang”,20);

                 s0 = new Student(“wangpeng”,30);

當讀到該語句時,棧中建立s0和name age并指派name = “text”,age = 20;

new的時候堆建立執行個體和執行個體變量,并拷貝name 和 age的值,this.name =“text”,this.age = 20;

然後new中的”=”号使得s0指向建立的執行個體對象。當s0再new一個執行個體的時候原來的指向消失,指向一個新的執行個體,原來的執行個體被垃圾回收。

3. 構造函數

         構造函數在被指派前被調用(如2中的new),主要實作對象的初始化。構造函數沒有傳回值,即使是void類型也會報錯!子類的構造函數通過super()調用父類構造函數。如果父類中定義了帶參的構造函數,則子類構造函數必須在第一行調用相應的帶參super(),否則出錯。構造函數可以重載但不能被繼承。可以在構造方法的第一行使用this關鍵字調用其它(重載的)構造方法

Eg:   Class Person{

Person(int a,int b){}

Person(){

This(20,30);

}

}

4.成員變量初始化的預設值

堆棧、構造函數、繼承、多态等總結

5.對象中屬性和方法的可見度:

         Public: 通用

Protected: 同類,同包, 不同包中子類的方法中通過supper.(方法/屬性)來通路

Default: 預設,即不寫的時候。同類, 同包

Private: 隻能同類中

6.方法内定義變量時:

除了final外不能使用其他的修飾符;在使用之前必須初始化,但如果沒有使用可以不初始化。

7. ==與equals的差別

==用于比較兩個primitive 主資料類型或者判斷兩個引用是否引用同一個對象

Equals主要用來比較兩個字元串是否一樣,傳回一個boolean值;

用法:String str1 = "aa";

      String str2 = "aa";

      if(str1.equals(str2)){}

8.  繼承:

Is – a  Has –a當兩個類滿足這兩種模型時才能繼承。Java不能多繼承

9.重載(overload)和重寫(override)的差別:

重寫方法必須和被重寫方法具有相同的方法名稱、參數清單和傳回值類型

重寫方法不能使用比被重寫方法更嚴格的通路權限

不能抛出更大的異常

         重載隻是參數清單不同而已,可以看成是互不相關的幾個方法

10.多态(有點難)

一個引用類型變量可能指向(引用)多種不同類型的對象

§         Person p = new Student();

§         Object o = new Person();

§         o = new Student();       

一個引用類型變量如果聲明為父類的類型,但實際引用的是子類對象,那麼該變量就不能再通路子類中添加的屬性和方法。School是Student類添加的屬性。

§              Student m = new Student();

§              m.school = "pku";   //合法

§              Person e = new Student();

§              e.school = "pku";      //非法

11造型(對象間的強制類型轉換):

從子類到父類的類型轉換可以自動進行

從父類到子類的類型轉換必須通過造型(強制類型轉換)實作

無繼承關系的引用類型間的轉換是非法的

     Animal a = new Dog();                 

     Dog d = (Dog)a;                              

     //error子類也不能接收子類的執行個體        

     Animal a = new Animal();但這樣就出錯了

     Dog d = (Dog)a;

     //errorDog就隻能接收Dog類型

12.其他:

         Instanceof用于判斷一個執行個體是否是另一個類的執行個體。用法if(e instanceof Student)傳回一個boolean值。