概念:
繼承是java面向對象編程技術的一塊基石,因爲它允許創建分等級層次的類。
繼承就是子類繼承父類的特徵和行爲,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行爲。
上面這張圖就可以反映出我們生活中的繼承,簡單的來說:
兔子和羊都屬於食草類動物,獅子和豹都屬於食肉類動物。
食草類動物和食肉類動物又同屬於動物類。
所以繼承需要符合的關係是:is-a,父類更通用,子類更具體。
雖然食草動物和食肉動物都是屬於動物,但是兩者的屬性和行爲上有差別,所以子類會具有父類的一般特性,同時也會具有一些自身的特性。
總的來說,繼承可以使代碼的複用變的十分簡單,我可以定義一個子類,擁有父類的所有屬性和方法。同時,子類也可以重新定義方法,追加屬性和方法,可以很大程度的減少工作量。
繼承的特性有以下幾點:
①子類擁有父類非 private 的屬性、方法。
②子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。
③子類可以用自己的方式實現父類的方法。
④Java 的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如 A 類繼承 B 類,B 類繼承 C 類,所以按照關係就是 C 類是 B 類的父類,B 類是 A 類的父類。
⑤提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯繫越緊密,代碼獨立性越差)。
下面,這張圖體現了Java中的繼承類型👇👇👇
繼承的關鍵字:
繼承可以使用 extends 和 implements 這兩個關鍵字來實現繼承,而且所有的類都是繼承於 java.lang.Object,當一個類沒有繼承的兩個關鍵字,則默認繼承object(這個類在 java.lang 包中,所以不需要 import)祖先類。
extends關鍵字:在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以說 extends 只能繼承一個類。
implements關鍵字:使用 implements 關鍵字可以變相的使java具有多繼承的特性,使用範圍爲類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間採用逗號分隔)。
①super關鍵字:代表的是父類空間的引用。this關鍵字:代表的是所屬函數的調用者對象。
②super關鍵字:必須要有繼承關係才能使用。this關鍵字:不需要存在繼承關係也可以使用。
③super關鍵字:調用父類的構造函數。this關鍵字:調用本類的構造函數。
在這裏,我們先舉一個簡單的例子吧!!!👇👇👇
import java.util.*;
class Animals {//定義父類Animals
public void getEat() {//定義一個公共方法
System.out.println("很多動物正在吃飯!");
}
}
class Dog extends Animals {//定義子類Dog,繼承了父類Animals
public void getEat() {
System.out.println("它是狗,正在吃骨頭!");
}
public void getEating() {
this.getEat();//調用本類的方法getEat()
super.getEat();//調用父類的方法getEat()
}
}
class Cat extends Animals {//這個與子類Dog是完全一樣的
public void getEat() {
System.out.println("它是貓,正在喝牛奶!");
}
public void getEating() {
this.getEat();
super.getEat();
}
}
public class Forever {
public static void main(String[] args){
Animals a=new Animals();
a.getEat();
Dog b=new Dog();
b.getEating();
Cat c=new Cat();
c.getEating();
}
}
運行結果如下:
下面,我們再來看一個例子吧!!!👇👇👇
①現有一個父類Father
public class Father {
private String name;
private String action;
public Father(String name,String action) {
this.name=name;
this.action=action;
}
public void getEat() {
System.out.println("動物:"+this.name);
}
public void getAction() {
System.out.println("愛好:"+this.action);
}
public void animal() {
System.out.println("動物真有趣!");
}
}
②兩個子類Son1和Son2
public class Son1 extends Father {
public Son1(String name,String action) {
super(name,action);
}
}
public class Son2 extends Father {
public Son2(String name,String action) {
super(name,action);
}
}
③最後通過Java運行程序的入口main方法裏的具體操作來實現繼承
import java.util.*;
public class First {
public static void main(String[] args) {
Father a=new Father("豬","吃喝睡");
Son1 b=new Son1("狗","吃骨頭!");
Son2 c=new Son2("貓","抓老鼠!");
b.getEat();
b.getAction();
c.getEat();
c.getAction();
a.getEat();
a.getAction();
a.animal();
}
}
運行結果如下:
那麼,以上就是博主對於Java三大特性之一——繼承的理解,如有錯誤,或是理解不周的地方,還望大佬指出!!!
在此,感謝大家的支持,感謝感謝!!!