超類 子類之間的繼承 多型

2021-09-24 09:25:18 字數 3084 閱讀 7448

關鍵字extends表示繼承

子模擬超類擁有的功能更加豐富。在通過擴充套件超類定義子類的時候,僅需要指出子類與超類的不同之處。

子類例項化時會先在記憶體中開闢其從父類中繼承的所需空間。

示例

建立people類

public class people 

public void setname(string name)

public int getage()

public void setage(int age)

public int get***()

public void set***(int ***)

public void run()

public people(string name, int age, int ***)

public people()

@override

public string tostring() ';}}

建立student類

public class student extends people

public void setschoolname(string schoolname)

public string getstudentnum()

public void setstudentnum(string studentnum)

public student(string studentnum, string schoolname, string name, int age, int ***)

public student()

public void run()

@override

public string tostring() ' + super.tostring();}}

示例一

建立乙個main類

public class main 

}

執行結果:

people run

student run

結果分析:

在main方法中,通過people people = new people();可以建立乙個people物件,通過student student = new student();可以建立乙個studeng物件。student類繼承了people類,此時物件student在記憶體中有從people類繼承過來的name,age,***這三個例項域(不能直接訪問,在類中定義方法時,也不能訪問,只能通過訪問器、構造器),同時擁有student類中的studentnum、schoolname這兩個例項域(在類中定義方法時,可以直接訪問);物件student可以呼叫能從people類中繼承來的方法,也可以呼叫student類定義的方法;有一點需要注意,在people類中定義了run方法,在student類中也定義了run方法,此時student類中的run方法將重寫(覆蓋)父類中的run方法,物件student呼叫run方法將呼叫student類中的run方法。

示例二

在main方法中,寫這麼一段**people people = new student();

物件people只能呼叫people類中的方法,不會報錯。這是因為父類型別物件可以引用子類型別物件,反之student student = new people();,編譯器將報錯。但物件people在記憶體卻開闢乙個student物件的空間,卻只能使用people類中的方法,而訪問不到student類中的方法。

main方法:

public class main 

}

執行結果:

studentpeople
結果分析:

在main方法中,如果物件people呼叫student中自己的方法,將會報錯。因為它只能呼叫people類定義的方法,而tostring方法在people類中進行了重寫,在student類中也進行了重寫,而people物件所引用的是乙個student物件,所以它所呼叫的tostring方法將是被student類重寫的方法。

示例三

在main方法中,對上乙個示例的物件people進行強制轉換student student = (student)people;此時物件student將可以呼叫student類中的方法,也可以呼叫people類中的方法。因為物件people實際指向的是student物件,所以可以將其強制轉化成student物件。

但是,當物件people指向的是people物件時,再對物件people物件進行student強制轉換將會報錯。

總結:簡單來說,people people = new student();就是將對people的描述應用到student上,該描述不包括student中自有的部分,所以物件people呼叫不了。在對它做強制轉換之後,student student = (student)people;也就是將student的描述應用到物件people上,因為物件people本身就引用的是student物件,所以該描述將可以完全描述,物件student也就可以呼叫到student類的方法。

student student = new people();相當於是用對student的描述來描述people,因為student繼承people,故對student的描述多於對people的描述,故編譯器將會報錯。

子類與超類,多型,上轉型,下轉型

寫乙個父類 package superandthis public class superclass public void say public void go public static void think 2.寫乙個子類 package superandthis public class c...

py 子類繼承父類

class 派生類名 基類名 usr bin python coding utf 8 class parent 定義父類 parentattr 100def init self print 呼叫父類建構函式 defparentmethod self print 呼叫父類方法 defsetattr s...

swift繼承(基類and子類)

乙個類可以繼承另乙個類的方法,屬性和其它特性。當乙個類繼承其它類時,繼承類叫子類,被繼承類叫超類 或父類 在 swift 中,繼承是區分 類 與其它型別的乙個基本特徵。不繼承於其它類的類,稱之為基類。定義乙個基類 class person var seyhello string set subscr...