標籤:java 物件導向
繼承
**首先物件導向的三大特性:
1. 封裝
2. 繼承
3. 多態**
文法
class Subclass extends Superclass{ }
作用
- 繼承的出現提高了代碼的複用性。
- 繼承的出現讓類與類之間產生了關係,提供了多態的前提。
- 不要僅為了擷取其他類中某個功能而去繼承
例子
class Person { String name; int age;}/*繼承與Person類*/class Student extends Person { int weight;}
- Student類繼承了Person類,他擁有了Person類的所有成員變數
- Student類擁有自己的一個成員變數
- 如果Person類裡裡面的變數是private的,子類就不能直接存取了,只能通過get和set函數
- Java中只有單繼承,也就是一個子類只能繼承一個父類
子類和父類構造器的調用
- 子類中所有的構造器預設都會訪問父類中空參數的構造器
- 當父類中沒有空參數的構造器時,子類的構造器必須通過this(參數列表)或者super(參數列表)語句指定調用本類或者父類中相應的構造器,且必須放在構造器的第一行
- 如果子類構造器中既未顯式調用父類或本類的構造器,且父類中又沒有無參的構造器,則編譯出錯
class Person { String name; int age; Person() { System.out.println("Person的構造器!"); }}class Student extends Person { Student() { System.out.println("Student的構造器!"); } int weight;}
結果:
Person的構造器!Student的構造器!
方法重寫要求
- 重寫方法必須和被重寫方法具有相同的方法名稱、參數列表和傳回值類型。
- 重寫方法不能使用比被重寫方法更嚴格的存取權限。
- 重寫和被重寫的方法須同時為static的,或同時為非static的
- 子類方法拋出的異常不能大於父類被重寫方法的異常
class Person { String name; int age; public void say() { System.out.println("I am person!"); }}class Student extends Person { int weight; public void say() { System.out.println("I am student!");//方法重寫 }}
下面這個情況不是方法重寫
class Person { String name; int age; public void say() { System.out.println("I am person!"); }}class Student extends Person { int weight; private void say() { System.out.println("I am student!");//不是方法重寫 }}
存取權限
【java】Java的繼承,方法重寫,存取權限