Java面向對象關鍵字extends繼承的深入講解
一、 問題引出
面向對象的編程思想使得代碼中創(chuàng)建的類更加具體,他們都有各自的屬性,方法。有的時候一些客觀事物之前存在一些聯(lián)系,那么他們在代碼中的具體類也存在一些聯(lián)系。
例如:設計一個動物類
public class Animal { public String name; public int age; public Animal(String name) { this.name = name; } public Animal(int age) { this.age = age; } public void eat(){ System.out.println(this.name+"吃東西"); } }
這個動物類有自己的name,age屬性和eat方法
我們又想創(chuàng)建一個貓類和狗類
class cat { public String name; public int age; public cat(String name) { this.name = name; } public cat(int age) { this.age = age; } public void eat(){ System.out.println(this.name+"吃飯"); } } class dog{ public String name; public int age; public dog(int age) { this.age = age; } public dog(String name) { this.name = name; } public void eat(){ System.out.println(this.name+"干飯"); } }
由于大家都是碳基生物,你要吃飯我也要吃飯,你有名字我也有名字,也都有自己的年齡,我們在創(chuàng)建其他類的時候還需要在寫一遍他們的屬性name,age,和方法eat。并且,從邏輯上來說貓和狗都屬于動物。這就造成了大量重復的代碼,那有沒有什么辦法能讓我不用把這些屬性。方法在寫一遍呢?
繼承:我來啦?。。?/p>
繼承作為面向對象編程的一個非常重要的關鍵字,在C++,和Java當中都可以使用它來減少代碼冗余。顧名思義,它可以讓一個子類繼承另一個父類,就像兒子繼承爸爸的財產一樣,繼承后的子類可以擁有父類的方法,屬性,這樣每次在定義動物類完之后,在想要定義狗或者貓類的時候就不用再把多余的代碼寫一遍了。我們來看看效果。
二、繼承extends
2.1 繼承的用法
子類extends父類即可
class cat extends animal{ public cat(String name) { super(name); } public cat(int age){ super(age); } public void catchMouce(){ System.out.println(this.name+"抓老鼠"); } } class dog extends animal{ public dog(String name) { super(name); } public dog(int age) { super(age); } public void defence(){ System.out.println(this.name+"看家"); } }
在上面的代碼中,cat,dog被稱為子類、派生類,而animal被稱為父類或者超類,extends英文意思為擴展,這里可以理解成繼承,例如我們寫的cat類有了抓老鼠的方法,dog類有了看家的方法。繼承可以讓子類擁有父類public修飾的屬性和方法,cat、dog類就繼承了animal類的name、age屬性以及eat方法。
2.2 基本語法
使用 extends 指定父類.
子類會繼承父類的所有 public 的字段和方法.
對于父類的 private 的字段和方法, 子類中是無法訪問的.
子類的實例中, 也包含著父類的實例. 可以使用 super 關鍵字得到父類實例的引用
子類繼承父類之后,還可以聲明自己特有的屬性和方法,實現(xiàn)功能的拓展。
2.3繼承的好處
1:減少代碼的冗余,提高復用性。
2:便于功能的拓展
3:為多態(tài)提供了前提。
2.4繼承性
Java各種類互相繼承的屬性稱作繼承性,繼承性有一些規(guī)定。
1:一個類可以被多個子類繼承。
2:Java的單繼承性:一個子類只能繼承一個父類。比如一個兒子只能有一個親爸爸,一個爸爸可以有好幾個兒子。在C++,和python中支持多繼承
3:如果一個類沒有說明一個類的父類的話,那么此類繼承于java.lang.Object類
4:所以的類(除了java.lang.Object)都間接或直接的繼承java.lang.Object類。那么就意味這所有的類都具有java.lang.Object類聲明的功能。
總結
到此這篇關于Java面向對象關鍵字extends繼承的文章就介紹到這了,更多相關Java關鍵字extends繼承內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring中通過ApplicationContext getBean獲取注入對象的方法實例
今天小編就為大家分享一篇關于spring中通過ApplicationContext getBean獲取注入對象的方法實例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03JAVA多線程Thread和Runnable的實現(xiàn)
java中實現(xiàn)多線程有兩種方法:一種是繼承Thread類,另一種是實現(xiàn)Runnable接口。2013-03-03Java VisualVM監(jiān)控遠程JVM(詳解)
下面小編就為大家?guī)硪黄狫ava VisualVM監(jiān)控遠程JVM(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖
這篇文章給大家介紹了SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03Spring Security自定義登錄原理及實現(xiàn)詳解
這篇文章主要介紹了Spring Security自定義登錄原理及實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09