1. 繼承簡介
- 繼承是類和類之間的一種關(guān)系,一個(gè)為子類(派生類)割粮,一個(gè)為父類(基類)盾碗。子類繼承父類,使用關(guān)鍵字extends來表示舀瓢,子類是父類的擴(kuò)展廷雅。
- JAVA類中只有單繼承,沒有多繼承京髓。
- 子類繼承父類集可以擁有父類的全部方法
- java中所有的類都默認(rèn)繼承object類
代碼講解
public方法直接繼承航缀,private屬性通過get和set方法進(jìn)行操縱。
Pet類package Demo02; public class Pet { String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void run(){ System.out.println("動(dòng)物可以跑"); } }
Dog類
package Demo02; public class Dog extends Pet { private String name = "旺財(cái)"; public void shout(){ System.out.println(this.name + "會(huì)汪汪叫堰怨。"); } }
main
package Demo02; public class Application { public static void main(String[] args) { Dog wangCai = new Dog(); wangCai.run();//Dog類繼承了Pet類芥玉,因此有run方法 wangCai.shout(); //通過set和get方法操縱父類的私有屬性 wangCai.setAge(3); System.out.println(wangCai.getAge()); } }
2. super
上述代碼示例中,可以在Dog類中也寫一個(gè)run方法,并使用super繼承父類的run方法备图。
public void run(){ super.run(); //繼承父類的run方法 System.out.println(this.name + "歡快的跑"); }
2.1 super注意點(diǎn)
(1)super只能出現(xiàn)在子類的方法或構(gòu)造方法中
(2)super在子類的構(gòu)造方法中調(diào)用父類的構(gòu)造方法時(shí)灿巧,必須位于構(gòu)造方法的第一個(gè)
(3)super和this不能同時(shí)調(diào)用構(gòu)造方法(因?yàn)閮烧叨夹枰挥诘谝粋€(gè))
2.2 super 與 this 的區(qū)別
(1)代表對象不同
- super:代表父類對象的引用
- this:代表本身調(diào)用者這個(gè)對象
(2)前提條件 - super:只能在繼承條件下才可以使用
- this :沒有繼承也可以使用
(3)構(gòu)造方法 - super:父類的構(gòu)造
- this:本類的構(gòu)造
3.方法的重寫
- 靜態(tài)方法不是重寫赶袄,方法的調(diào)用之和左邊定義的數(shù)據(jù)類型有關(guān)
- 非靜態(tài)方法的public,方法重寫
- 重寫都是方法的重寫抠藕,和屬性無關(guān)
代碼示例
//main方法 package Demo; public class Application { public static void main(String[] args) { A a = new A(); a.test(); B b = new A(); b.test(); } } //父類 package Demo; public class B { public static void test(){ //使用static饿肺,該方法將不會(huì)被重寫 System.out.println("B=>test"); } } //子類 package Demo; public class A extends B{ public static void test(){ System.out.println("A=>test"); } } //執(zhí)行main方法輸出的結(jié)果為:A=>test B=>test //將子類和父類的方法修飾符static都去除后的結(jié)果:A=>test B=>test,此時(shí)為方法的重寫
注意點(diǎn)
(1)重寫是有繼承關(guān)系的子類重寫父類的方法
(2)重寫方法的方法名和參數(shù)列表都必須相同幢痘,但方法體不同
(3)拋出的異常:范圍可以縮小但不能擴(kuò)大
(4)修飾符的范圍可以擴(kuò)大(子類大于父類)但不能縮小唬格,public > protected > default > private