繼承是面向對象三大特徵之一,封裝居首位,封裝以後造成了獨立體,獨立體 A和獨立體B 之間可能存在繼承關係。其實程序中的繼承靈感來自於現實生活,在現實生活中繼承到處可見,例如,兒子繼承了父親的財產,兒子不須要努力就頗有錢。java
生活中的繼承:框架
繼承時子類繼承父類的特徵和行爲,使得子類對象(實例)具備父類的屬性,或子類從父類繼承方法,使得子類具備與父類相同的行爲。兔子和羊屬於食草動物類,獅子和豹屬於食肉動物類。食草動物和食肉動物又是屬於動物類。因此繼承須要符合的關係是:is-a(Bird is-aAnimal),父類更通用,子類更具體。雖然食草動物和食肉動物都是屬於動物,可是二者的屬性和行爲上有差異,因此子類會具備父類的通常特性也會具備自身的特性。測試
定義this
經過 extends 關鍵字,能夠聲明一個子類繼承另一個父類,定義格式以下:spa
代碼示例:code
package com.wrg; // 定義員工類Employee,作爲父類
class Employee { // 定義name屬性
String name; // 定義員工的工做方法blog
public void work() { System.out.println("全力以赴地工做"); }
} /** * 定義講師類Teacher 繼承 員工類Employee */
class Teacher extends Employee { // 定義一個打印name的方法繼承
public void printName() { System.out.println("name=" + name); }
} //定義測試類內存
public class ExtendsTest { public static void main(String[] args) { // 建立一個子類對象
Teacher t = new Teacher(); // 爲該員工類的name屬性進行賦值 t.name = "小明"; // 調用該員工的 // printName()方法 t.printName(); // name = 小明 // 調用Teacher類繼承來的work()方法 t.work(); // 全力以赴地工做
}
}
好處
注意:不要僅爲了獲取其餘類中某個功能而去繼承
子類的特色
B類繼承 A類,則稱 A類爲超類(superclass)、父類、基類,B類則稱爲子類(subclass)、派生類、擴展類。
子類不能直接訪問父類中私有的(private)的成員變量和方法。
Java只支持單繼承和多層繼承,不容許多重繼承
class SubDemo extends Demo{ } //ok
class SubDemo extends Demo1,Demo2...//error
java 中規定,子類繼承父類,除構造方法不能繼承以外,剩下均可以繼承。可是私有的屬性沒法在子類中直接訪問。(父類中private修飾的不能在子類中直接訪問。能夠經過間接的手段來訪問。)
java 中的類沒有顯示的繼承任何類,則默認繼承 Object類,Object類是 java 語言提供的根類(老祖宗類),也就是說,一個對象與生俱來就有 Object類型中全部的特徵。
繼承的弊端
繼承的應用場景
本質上,子類繼承父類以後,是將父類繼承過來的方法歸爲本身全部。實際上調用的也不是父類的方法,是他子類本身的方法(由於已經繼承過來了就屬於本身的)。
經過子類對象訪問一個方法
在子類方法中訪問一個變量,採用的是就近原則。
問題:若是父類中沒有無參構造方法,只有帶參構造方法,該怎麼辦呢?
三種用法
this和super的區別