java 子類與父類


 

子類是由繼承得到的類,被繼承的類就是父類,子類與父類是"is-a"關系。

一、子類與父類

1. 子類

(1)子類定義

class 子類名 extends 父類名 {...}

(2)子類繼承性

子類繼承了父類的所有屬性和除了構造方法的其余方法。

  • 子類與父類在同個包中:子類繼承父類除了private成員
  • 子類與父類在不同包中:子類繼承父類除了private、友好成員
  • protected成員:若子類與祖先類同包,子類可訪問

2. 父類

所有類的祖先類是Object類(java.lang.Object)。

3. 子類與父類

父類可有0或多個子類,子類只能有一個父類。

obj instanceof Class;    // 若obj是Class的子類, 返回True, 否則返回False

 

public class Person extends Object {…}
public class Student extends Person {…}
public class Graduate extends Person {…}
/* ------------------------------------------- */

public void method1(Person e) {
    if (e instanceof Person) {
        // 處理Person類及其子類對象
    }
    if (e instanceof Student) {
        //處理Student類及其子類對象
    }
    if (e instanceof Graduate) {
        //處理Graduate類及其子類對象
    }
}

 

二、子類

1. 隱藏屬性

  當子類中新聲明的變量與父類的成員變量同名時,子類中繼承的變量被隱藏,若想使用,可通過繼承的方法調用。

2. 隱藏方法——方法重寫

  當子類中新聲明的方法與父類的方法同名時,為方法重寫,表示實現與父類不同的行為,但方法名相同。

  方法重寫時,方法名、返回值類型、參數列表都必須相同,訪問權限可升不可降,並且重寫的方法不能操作隱藏的成員。

三、子類與子類對象

  子類對象的用法與普通類的對象相同。

  子類對象不能操作隱藏的成員,可通過繼承的方法訪問。

四、父類與子類對象

1. 上轉型對象

  由父類People擴展的子類Chinese,將子類創建的對象Lina的引用值賦給父類創建的對象person,person即為對象的上轉型對象。

class People {...}
class Chinese extends People {...}
class E {
    public static void main(String args[]) {
        Chinese Lina = new Chinese();
        People person = Lina;
//      People person = new Chinese();  // 以上兩句類似此句
    }
}

  在上面代碼的基礎上,以下一語句是錯誤的。因為可以說Chinses類是People類,但不能說People類是Chinses類(如老虎是動物[✔],動物是老虎[✘])。

        Chinese Lisa = new People();  // 此句錯誤

2. 上轉型對象的規則

(1)上轉型對象不存在子類新增的變量或方法,只有繼承的、隱藏的變量和繼承的、重寫的方法。

(2)若子類重寫了方法,則上轉型對象調用的是重寫的方法。

(3)當子類重寫的方法是靜態方法時,上轉型對象調用的是父類的靜態方法。

(4)可將上轉型對象強制轉化為子類對象,此時該對象具備子類新增的屬性和行為。

 五、對象類型轉換

  • 從子類到父類的類型轉換可以自動進行。
  • 從父類到子類的類型轉換必須通過強制類型轉換實現。
  • 無繼承關系的引用類型間的轉換是非法的。
  • 在轉換前可使用instanceof操作符測試對象的類型。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM