繼承的進一步研究

2021-09-02 03:19:35 字數 3042 閱讀 5682

本章目標

掌握子類物件的例項化過程

掌握方法覆寫的概念及實現

掌握super關鍵字的作用

子類物件例項化過程

在繼承的操作中,對於子類物件的例項化也是有要求的:「子類物件在例項化之前必須首先呼叫父類中的構造方法之後再呼叫子類自己的構造方法」。

觀察子類物件的例項化過程

class person

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

}class student extends person

public string getschool()

public void setschool(string school)

}public class instancedemo

/* 結果:

* 父類 person 中的構造。

* 子類 student 中的構造。

* 姓名:張三; 年齡:30; 學校:my school

* */

}

隱含的語句

對於以上的**實際在子類的構造方法中隱含了乙個super()的語法

class student extends person

public string getschool()

public void setschool(string school)

方法的覆寫

在繼承的關係中也存在著方法覆寫的概念,所謂的方法覆寫就是指子類定義了與父類中同名的方法,但是在方法覆寫時必須考慮到許可權,即:被子類覆寫的方法不能擁有比父類方法更加嚴格的訪問許可權。

已學習過的三種訪問許可權:

——關於訪問許可權,實際上前幾章讀者已經見過三種訪問許可權了:private、default、public,這三種訪問許可權的具體作用本書後面會有介紹,讀者現在只需要記住大小關係即可:private < default < public。

所以,如果在父類中使用public定義的方法,子類的訪問許可權必須是public,否則程式會無法編譯。

方法的覆寫

class person");	}}

class student extends person"); }}

public class overridedemo01

/* 結果:

* student --> void print(){}

* */

}

錯誤的方法覆寫

如果現在被子類覆寫的方法許可權縮小的話,則在編譯時將出現錯誤提示。

class person") ; }

}class student extends person") ; }

} 呼叫父類中被子類覆寫過的方法

class person");	}}

class student extends person"); }}

public class overridedemo03

/* 結果:

* person --> void print(){}

* student --> void print(){}

* */

}

思考?

如果現在將父類的乙個方法定義成private訪問許可權,在子類中將此方法宣告為default訪問許可權,那麼這樣還叫做覆寫嗎?

class person");

} public void fun()

}class student extends person"); }}

public class overridedemo04

/* 結果:

* person --> void print(){}

* */

}

屬性的覆蓋

在繼承中除了方法可以覆寫之外,屬性也可以覆蓋,所謂的屬性覆蓋就是指子類宣告了與父類同名的屬性。

class person

class student extends person

}public class overridedemo05

/* 結果:

* 父類中的屬性:父類的屬性

* 子類中的屬性:子類的屬性

* */

}

方法的過載與覆寫的區別

super關鍵字的作用

使用super可以從子類中呼叫父類中的構造方法、普通方法、屬性。

使用super呼叫父類中的指定構造方法

class person

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

public string getinfo()

}class student extends person

public string getschool()

public void setschool(string school)

public string getinfo()

}public class superdemo01

/* 結果:

* 姓名:張三; 年齡:30; 學校:myshool

* */

}

this與super的區別

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

Looper Handler進一步學習

package com.test.looper import android.os.bundle import android.os.handler import android.os.handlerthread import android.os.looper import android.os....

進一步了解Makefile

mkdir p add src 一層一層建立目錄。touch add makefile 建立 makefile include 目錄中存放標頭檔案。scripts 存放指令碼檔案。存放方式 按照核心管理原始碼來管理。為什麼學習makefile?編譯大型專案 讀懂別人的開源 找到程式入口 看專案的順序...