JAVA繼承
繼承:定義一個類,讓它成為某個類(一般叫父類)的子類,那么它就會繼承父類里的部分屬性和方法。
因此,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,通過類的繼承關系,使公共的特性能夠共享,簡化了對象、類的創建工作量,增加了代碼的可重用性,復用性。
定義語法:
[類修飾符]?class?子類名?extends?父類名 {?語句;}
public class Person{ ?? ?private String name ; //name屬性私有化,無法在其他類進行訪問或操作,所以不能繼承 ?? ?protected String sex ; ?? ?public String getName() { ?? ??? ?return name; ?? ?} ?? ?public void setName(String name) {? ? ? ? ? this.name = name; ? ? }?} //extends關鍵字作用為一個子類指定父類的實現,即student類繼承了Person類。 public class student extends Person {}
1、在Java中,Java.lang.Object 類是所有java類的最高層父類,是唯一一個沒有父類的類:
如果在類的聲明中未使用extends 關鍵字指明其父類,則默認父類為Object 類。java中的類的繼承關系形成了以Object 類為樹根的樹狀層次結構。
2、如果兩個類存在繼承關系,則子類會自動繼承父類的部分方法和變量,在子類中可以對其調用。在java中,只允許單繼承,即 一個類只能繼承一個父類,但可以擁有多個子類。
(1) 子類繼承父類的成員變量
1)能夠繼承父類的public和protected成員變量;不能夠繼承父類的private成員變量;
2)對于子類可以繼承的父類成員變量,如果在子類中出現了同名稱的成員變量,則會發生隱藏現象,即子類的成員變量會屏蔽掉父類的同名成員變量。如果要在子類中訪問父類中同名成員變量,需要使用super關鍵字來進行引用。
public class Person{ ?? ?protected String sex = "男" ; } //extends關鍵字作用為一個子類指定父類的實現 public class student extends Person { ?? ?protected String sex = "女" ;? //繼承Person類,出現同名稱成員變量 }
結果顯示:(隱藏現象)
若要獲取父類的成員變量,則:
public class student extends Person { ?? ?private String sex = "女" ; //私有化屬性 ?? ?public String getSex() //創建方法在其他類調用,用super.獲取父類成員變量 ?? ?{return super.sex;} }
(2) 子類繼承父類的方法
1)能夠繼承父類的public和protected成員方法;不能夠繼承父類的private成員方法;
2)對于子類可以繼承的父類成員方法,如果在子類中出現了同名稱且同參數的成員方法(又叫子類重寫父類的方法),則稱為覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。
public class Person{ ?? ?public void setName() { ?? ??? ?System.out.println("父類的方法被調用!"); ?? ?} } public class student extends Person { ?? ?public void setName() { ?? ??? ?System.out.println("子類的方法被調用!"); ?? ?} } public class test { ?? ?public static void main(String[] args) ?? ?{ ?? ??? ?student student = new student(); ?? ??? ?student.setName(); ?? ?}?}
若要獲取父類的成員方法,則:
public class student extends Person { ?? ?public void setName() { ? ? ? ? super.setName();??// 在同名成員方法中,用super.獲取父類的成員方法 ?? ??? ?System.out.println("子類的方法被調用!"); ?? ?} }
隱藏和覆蓋的區別是:隱藏是針對成員變量和靜態方法的,而覆蓋是針對普通方法的。
3、子類是不能夠繼承父類的構造函數的,但是,如果父類的構造函數都是帶有參數的,則必須在子類的構造函數中用super關鍵字調用父類的構造函數并配以適當的參數列表。如果父類有無參構造函數,則在子類的構造函數中,系統會自動調用父類的無參構造函數。
public class Person{ ?? ?private String name ; ?? ?private int age ; ?? ?public Person(String name , int age) ?? ?{ ?? ??? ?this.name = name ; ?? ??? ?this.age = age ; ?? ?} ?? ?public String toString() { ?? ??? ?return "name=" + name + ", age=" + age + ""; ?? ?}} public class student extends Person { ?? ?public student(String name , int age) ?? ?{ ? ? ? ? super("小明",18); ?? ?}}
4、super關鍵字表示父類,主要有兩種用法:
1)super.menber; (用于在子類中調用父類的同名成員變量或者方法)
2)super([args]); (用于調用父類的構造函數,args表示參數,且要在子類構造函數的第一個語句)
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。