Java面向?qū)ο箨P(guān)鍵字extends繼承的深入講解
一、 問(wèn)題引出
面向?qū)ο蟮木幊趟枷胧沟么a中創(chuàng)建的類(lèi)更加具體,他們都有各自的屬性,方法。有的時(shí)候一些客觀事物之前存在一些聯(lián)系,那么他們?cè)诖a中的具體類(lèi)也存在一些聯(lián)系。
例如:設(shè)計(jì)一個(gè)動(dòng)物類(lèi)
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+"吃東西");
}
}
這個(gè)動(dòng)物類(lèi)有自己的name,age屬性和eat方法
我們又想創(chuàng)建一個(gè)貓類(lèi)和狗類(lèi)
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+"干飯");
}
}
由于大家都是碳基生物,你要吃飯我也要吃飯,你有名字我也有名字,也都有自己的年齡,我們?cè)趧?chuàng)建其他類(lèi)的時(shí)候還需要在寫(xiě)一遍他們的屬性name,age,和方法eat。并且,從邏輯上來(lái)說(shuō)貓和狗都屬于動(dòng)物。這就造成了大量重復(fù)的代碼,那有沒(méi)有什么辦法能讓我不用把這些屬性。方法在寫(xiě)一遍呢?
繼承:我來(lái)啦?。?!
繼承作為面向?qū)ο缶幊痰囊粋€(gè)非常重要的關(guān)鍵字,在C++,和Java當(dāng)中都可以使用它來(lái)減少代碼冗余。顧名思義,它可以讓一個(gè)子類(lèi)繼承另一個(gè)父類(lèi),就像兒子繼承爸爸的財(cái)產(chǎn)一樣,繼承后的子類(lèi)可以擁有父類(lèi)的方法,屬性,這樣每次在定義動(dòng)物類(lèi)完之后,在想要定義狗或者貓類(lèi)的時(shí)候就不用再把多余的代碼寫(xiě)一遍了。我們來(lái)看看效果。
二、繼承extends
2.1 繼承的用法
子類(lèi)extends父類(lèi)即可
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被稱(chēng)為子類(lèi)、派生類(lèi),而animal被稱(chēng)為父類(lèi)或者超類(lèi),extends英文意思為擴(kuò)展,這里可以理解成繼承,例如我們寫(xiě)的cat類(lèi)有了抓老鼠的方法,dog類(lèi)有了看家的方法。繼承可以讓子類(lèi)擁有父類(lèi)public修飾的屬性和方法,cat、dog類(lèi)就繼承了animal類(lèi)的name、age屬性以及eat方法。
2.2 基本語(yǔ)法
使用 extends 指定父類(lèi).
子類(lèi)會(huì)繼承父類(lèi)的所有 public 的字段和方法.
對(duì)于父類(lèi)的 private 的字段和方法, 子類(lèi)中是無(wú)法訪問(wèn)的.
子類(lèi)的實(shí)例中, 也包含著父類(lèi)的實(shí)例. 可以使用 super 關(guān)鍵字得到父類(lèi)實(shí)例的引用
子類(lèi)繼承父類(lèi)之后,還可以聲明自己特有的屬性和方法,實(shí)現(xiàn)功能的拓展。
2.3繼承的好處
1:減少代碼的冗余,提高復(fù)用性。
2:便于功能的拓展
3:為多態(tài)提供了前提。
2.4繼承性
Java各種類(lèi)互相繼承的屬性稱(chēng)作繼承性,繼承性有一些規(guī)定。
1:一個(gè)類(lèi)可以被多個(gè)子類(lèi)繼承。
2:Java的單繼承性:一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi)。比如一個(gè)兒子只能有一個(gè)親爸爸,一個(gè)爸爸可以有好幾個(gè)兒子。在C++,和python中支持多繼承
3:如果一個(gè)類(lèi)沒(méi)有說(shuō)明一個(gè)類(lèi)的父類(lèi)的話,那么此類(lèi)繼承于java.lang.Object類(lèi)
4:所以的類(lèi)(除了java.lang.Object)都間接或直接的繼承java.lang.Object類(lèi)。那么就意味這所有的類(lèi)都具有java.lang.Object類(lèi)聲明的功能。
總結(jié)
到此這篇關(guān)于Java面向?qū)ο箨P(guān)鍵字extends繼承的文章就介紹到這了,更多相關(guān)Java關(guān)鍵字extends繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作
這篇文章主要介紹了SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Java實(shí)現(xiàn)將Boolean轉(zhuǎn)為Json對(duì)象的方法
在Java中,將boolean值轉(zhuǎn)換為JSON對(duì)象通常涉及使用JSON庫(kù),例如org.json或Gson,這里我們將使用org.json庫(kù)來(lái)進(jìn)行詳細(xì)演示,這個(gè)庫(kù)提供了簡(jiǎn)單且直觀的方法來(lái)創(chuàng)建和操作JSON對(duì)象,需要的朋友可以參考下2024-11-11
SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解
這篇文章主要介紹了SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
詳解SpringCloud Ribbon 負(fù)載均衡通過(guò)服務(wù)器名無(wú)法連接的神坑
這篇文章主要介紹了詳解SpringCloud Ribbon 負(fù)載均衡通過(guò)服務(wù)器名無(wú)法連接的神坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
SpringBoot項(xiàng)目中使用Mockito的示例代碼
這篇文章主要介紹了SpringBoot項(xiàng)目中使用Mockito的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Java利用TreeUtils工具類(lèi)實(shí)現(xiàn)列表轉(zhuǎn)樹(shù)
在開(kāi)發(fā)過(guò)程中,總有列表轉(zhuǎn)樹(shù)的需求,幾乎是項(xiàng)目的標(biāo)配,有沒(méi)有一種通用且跨項(xiàng)目的解決方式呢?本文將基于Java8的Lambda?表達(dá)式和Stream等知識(shí),使用TreeUtils工具類(lèi)實(shí)現(xiàn)一行代碼完成列表轉(zhuǎn)樹(shù)這一通用型需求,需要的可以參考一下2022-11-11
rabbitmq使用springboot實(shí)現(xiàn)direct模式(最新推薦)
這篇文章主要介紹了rabbitmq使用springboot實(shí)現(xiàn)direct模式,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù)的思路詳解
這篇文章主要介紹了mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

