首先咱們知道,面對對象有三大特徵:安全
封裝:解決了數據的安全性問題學習
繼承:解決了代碼的重用問題spa
多態:解決了程序的擴展問題設計
上一篇博客中,咱們瞭解了一下封裝,如今我了再來看看什麼是繼承。對象
在現實生活中,咱們能夠把封裝理解成兒子對父親財產的繼承。而在面向對象程序設計中的繼承,是一個對象從另外一個對象獲取屬性和方法的過程。繼承
繼承是利用現有的類建立新類的過程,現有的類稱做基類(父類),建立的新類稱爲派生類(子類),派生類能夠擁有全部基類的非私有的屬性和方法。接口
例如,咱們能夠有一個類「人」,而咱們要建立一個新的類「學生」,學生也是屬於「人」的一種,有「人」這個類的一些共通屬性行爲,咱們就能夠把「學生」這個類繼承自「人」,而還有「小學生」、「中學生」、「大學生」,他們都屬於學生,咱們可讓他們繼承自「學生」類。博客
在繼承中,最高層的應該是最具備廣泛性的、最符合通常狀況的,往下一層,都應該比上一層更具體,在繼承中子類可以自動共享基類中的成員屬性和成員方法。程序設計
在Java中,要繼承,須要使用extends關鍵字,繼承的語法格式以下:class
[訪問修飾符] class 子類名 extends 父類名 { 成員列表 } 如 public Student extends Person{ ...... }
例子:
按照上面的舉例,咱們先定義一個Person類
public class Person{ public String name; public int age; public void sleep(){ System.out.println("我正在睡覺"); } public void eat(){ System.out.println("我正在吃飯"); } }
對於「人」來講,人都有一個名字,都有年齡,可以睡覺,也能夠吃飯。
而我學若是此時須要有一個學生類,學生也屬與人,學生也都有人的特徵,此時咱們即可以使學生繼承於人。
public class Student extends Person{ public String sid; //學號 public String cls; //班級 public void study(){ System.out.println("我正在學習"); } }
對於學生來講,學生有本身的學號,有本身的班級,還有學習等等功能。
public class Test{ public static void main(String[] args){ Student stu = new Student(); stu.name = "張三"; stu.age = 20; //咱們能夠爲Student類型的對象設置name和age,由於S圖等繼承自Person,因此也擁有Person類的屬性和方法。 stu.sleep(); stu.eat(); //咱們也可使用Person類的方法。 stu.sid = "S20150101001"; //固然,咱們也可使用Student本身的屬性和方法 stu.cls = "1001"; stu.study(); Person p = new Person(); p.study(); //錯誤,父類不可使用子類的屬性和方法。 } }
固然,若是還須要有大學生等,咱們能夠定義大學生,使大學生繼承自學生類,大學生即可以擁有學生類和「人」類的屬性和方法。
須要注意的是,Java中的繼承是單繼承,也就是說,只能繼承一個父類,若是Student繼承了Person類,那就不能再直接繼承其餘的類。
須要注意的是,父類中的構造方法是不能被繼承的。
同時須要咱們注意的是,在對象的構建過程當中,會先構建出父類,在構建出子類,這個比較好理解,就想在現實生活中同樣,只有先有父親,然後纔有兒子同樣。
例如:
class ParentClass { //定義父類 public ParentClass() { //構造方法 System.out.println("這是父類的構造方法。"); } } class ChildClass extends ParentClass { //子類繼承於父類 public ChildClass() { //構造方法 System.out.println("這是子類的構造方法。"); } } public class ConstructorTest { //該類用於容納main方法 public static void main(String[] args) { ChildClass cc = new ChildClass(); //實例化子類對象 } }
執行輸出:
這是父類的構造方法。
這是子類的構造方法。
所以:
在Java中,用super關鍵字能夠對父類進行操做。
super主要有兩種用途:
第一種用途是:在子類的構造方法中,super關鍵字能夠顯式地調用父類的構造方法,用於將參數傳遞給它;
其語法是:super(參數);
須要注意的是:該條語句必須是構造方法中的第一條語句。
第二中用途是:若是子類中有和父類相同名字的成員,在子類中是默認使用子類中的成員的,可是咱們能夠super關鍵字顯式調用父類中的成員。
語法:super.成員名
須要注意的是:父類中該成員不是private的。
繼承是單向的,子類能夠訪問父類中的成員,但父類沒法訪問子類的成員。
Java中只容許單繼承,一個子類只能擁有一個父類。
引入繼承,實現了代碼重用;
引入繼承,實現了遞增式的程序設計。
能減小代碼和數據的重複冗餘度,並經過加強一致性來減小模塊間的接口和界面,從而加強了程序的可維護性;
能清晰地體現出類與類之間的層次結構關係。