第22天学习Java的笔记-继承
生活随笔
收集整理的這篇文章主要介紹了
第22天学习Java的笔记-继承
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
繼承
1.繼承的概述
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-c1ocRigI-1608862409653)(F:\Java\Learn\day15\day22.assets\image-20201224091344928.png)]
2.繼承的格式
package Demo2201;//定義一個父類,員工 public class Employee {public void method() {System.out.println("方法執行");} } package Demo2201; //定義了一個員工的子類:講師 public class Teacher extends Employee {} package Demo2201;public class Assistant extends Employee {} package Demo2201; /* * 在繼承的關系中,“子類就是一個父類”,也就是說,子類可以被當作父類看待。 * 例如父類是員工,子類是講師,那么,講師就是一個員工。關系:is a。 * 定義父類的格式:(一個普通的類定義) * public class 父類名稱{ * //... * } * * 定義子類的格式: * public class 子類名稱 extends 父類名稱{ * //... * } * */ public class Demo01Extends {public static void main(String[] args) {//創建了一個子類對象Teacher teacher = new Teacher();//Teacher類當中雖然什么都沒寫,但是會繼承來自父類的method方法。teacher.method();//方法執行//創建另一個子類對象助教Assistant assistant = new Assistant();assistant.method();//方法執行} }3.繼承中成員變量的訪問特點
package Demo2202;public class Fu {int numFu = 10;int num = 1;public void methodFu() {//使用的是本類當中的,不會向下找子類的System.out.println(num);} } package Demo2202;public class Zi extends Fu{int numZi = 20;int num = 2;public void methodZi(){//因為本類當中有num,所以這里用的是本類的numSystem.out.println(num);} } package Demo2202;/* 在父子類的繼承關系當中,如果成員變量重名,則創建子類對象時,訪問有兩種方式:* 直接通過子類對象訪問成員變量: * 等號左邊是誰,就優先用誰,沒有則向上找。 * 間接通過成員方法訪問成員對象 * 該方法屬于誰,就優先用誰,沒有則向上找 * */ public class Demo02ExtendsField {public static void main(String[] args) {Fu fu = new Fu();//創建一個父類對象System.out.println(fu.numFu);//彈出來的只有numFu10System.out.println(fu.num);//1Zi zi = new Zi();//創建一個子類對象System.out.println(zi.numFu);//兩個都有10System.out.println(zi.numZi);//20//等號左邊是誰,就優先用誰System.out.println(zi.num);//2優先子類//System.out.println(zi.abc);//到處都沒有,編譯報錯//這個方法是子類的,優先用子類的,沒有再向上找zi.methodZi();//2//這個方法是在父類中定義的zi.methodFu();//1} }4.區分子類方法中重名的三種變量
package Demo2203;public class Fu {int num = 10; } package Demo2203;public class Zi extends Fu {int num = 20;public void method(){int num = 30;System.out.println(num);//30 局部變量System.out.println(this.num);//20 本類的成員變量System.out.println(super.num);//10 父類的成員變量} } package Demo2203; /* *局部變量: 直接寫成員變量名 * 本類的成員變量: this.成員變量名 * 父類的成員變量: super.成員變量名 * */ public class Demo01ExtendsField {public static void main(String[] args) {Zi zi = new Zi();zi.method();//30,20,10} }5.繼承中成員方法的訪問特點,繼承中方法的覆蓋重寫—概念與特點
package Demo2204;public class Fu {public void methodFu(){System.out.println("父類方法執行");}public void method(){System.out.println("父類重名方法執行");} } package Demo2204;public class Zi extends Fu {public void methodZi() {System.out.println("子類方法執行了");}public void method() {System.out.println("子類重名方法執行");}} package Demo2204; //子類可以用父類的方法;當子類和父類方法重名一樣時,子類優先用自己的。 //父類不可以用子類的方法 /* * 在父子類的繼承關系當中,創建子類對象,訪問成員方法的規則: * 創建的對象是誰,就優先用誰,如果沒有則向上找 * 注意事項: * 無論是成員方法還是成員變量,如果沒有都是向上找父類,絕對不會向下找子類的 * * 重寫(Override) * 概念:在繼承關系當中,方法的名稱一樣,參數列表也一樣。 * 重寫(Override):方法的名稱一樣,參數列表【也一樣】。覆蓋,覆寫。 * 重載(Overload):方法的名稱一樣,參數列表【不一樣】。 * * 方法的覆蓋重寫特點:創建的是子類對象,則優先使用子類方法。 * */ public class Demo01ExtendsMethod {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();//父類方法執行Zi zi = new Zi();zi.methodZi();//子類方法執行了zi.methodFu();//父類方法執行//創建的是new了子類對象,所以優先用子類方法zi.method();//子類重名方法執行} }6.繼承中方法的覆蓋重寫—注意事項
package Demo2205;public class Fu {public Object method(){return null;} } package Demo2205;public class Zi extends Fu {@Overridepublic Object method(){//如果改變method的名稱,override會報錯return null;} } package Demo2205;/* * 方法覆蓋重寫的注意事項: * 1.必須保證父子類之間方法的名稱相同,參數列表也相同 * @Override:寫在方法前面,用來檢測是不是有效的正確覆蓋重寫 * 這個注解就算不寫,只要滿足要求,也是正確的方法覆蓋重寫。 * * 2.子類方法的返回值必須小于等于父類方法的返回值范圍。 * 前提:java.lang.Object類是所有類的公共最高父類(祖宗類),java.lang.String就是Object的子類 * * 3.子類方法的權限必須大于等于父類方法的權限修飾符。 * 小擴展:Public>protected>(default)>private * 備注:(default)不是關鍵字default,而是什么都不寫,留空。 * */public class Demo01Override { }7.繼承方法的覆蓋重寫-應用場景
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DMpcO5y4-1608862409656)(F:\Java\Learn\day15\day22.assets\image-20201224163026065.png)]
package Demo2206;//本來的老款手機 public class Phone {public void call() {System.out.println("打電話了");}public void send() {System.out.println("發短信了");}public void show() {System.out.println("顯示號碼");} } package Demo2206; //定義一個新手機,使用老手機作為父類 public class NewPhone extends Phone {@Overridepublic void show() {super.show();//把父類的show方法拿過來重復利用//自己子類再來添加更多內容System.out.println("顯示姓名");System.out.println("顯示頭像");} } package Demo2206;/* * 新手機相對于老手機多了”顯示姓名,顯示頭像”的功能 * 對于原來老手機的顯示號碼,可以用super繼承,后面兩個功能可以自己重寫 * */public class Demo01Phone {public static void main(String[] args) {Phone phone = new Phone();phone.call();//打電話了phone.send();//發短信了phone.show();//顯示號碼System.out.println("=======");NewPhone newPhone = new NewPhone();newPhone.call();//打電話了newPhone.send();//發短信了newPhone.show();//顯示號碼,顯示姓名,顯示頭像} }8.繼承中構造方法的訪問特點
package Demo2207;public class Fu {public Fu(){System.out.println("父類無參構造方法");}public Fu(int num) {System.out.println("父類有參構造方法");} } package Demo2207;public class Zi extends Fu{public Zi(){//super();//在調用父類無參構造方法super(20);System.out.println("子類無參構造方法");}/*public void method() {super();}*/} package Demo2207;/* * 繼承關系中,父子類構造方法的訪問特點: * * 1.子類構造方法中有一個默認隱含的super()調用,所以一定是先調用的父類構造,后執行的子類構造。 * 2.子類構造可以通過super關鍵字來調用父類重載構造。贈送的是無參數的super * 3.super的父類構造調用,必須是子類構造方法的第一個語句.不能一個子類構造調用多次super構造。 * 總結: * 子類必須調用父類構造方法,不寫則贈送super();寫了則用寫的指定的super調用,super只能有一個,還必須是第一個。 * */public class Demo01Constructor {public static void main(String[] args) {Zi zi = new Zi();} /* * 父類無參構造方法 子類無參構造方法 * */}9.super關鍵字的三種用法
package Demo2208;public class Fu {int num = 20;public void method(){System.out.println("父類方法");} } package Demo2208;/* * super關鍵字的用法有三種: * 1.在子類的成員方法中,訪問父類的成員變量。 * 2.在子類的成員方法中,訪問父類的成員方法。 * 3.在子類的構造方法中,訪問父類的構造方法。 * * this是用來訪問本類內容的。 * */ public class Zi extends Fu {int num = 20;public Zi(){super();}public void methodZi(){System.out.println(super.num);//10父類}public void method(){super.method();//訪問父類中的methodSystem.out.println("子類方法");} }10.this關鍵字的三種用法
package Demo2209;public class Fu {int num = 30; } package Demo2209;/* * super關鍵字用來訪問父類內容,而this關鍵字用來訪問本類內容。用法也有三種。 * 1.在本類的成員方法中,訪問本類的成員變量。 * 2.在本類的成員方法中,訪問本類的另一個成員方法。 * 3.在本類的構造方法中,訪問本類的另一個構造方法。 * A.在第三種方法中要注意:this()調用也必須是構造方法的第一個語句。唯一一個。 * B.super和this兩種構造調用,不能同時使用,因為都是唯一的。 * */public class Zi extends Fu{int num = 20;//成員變量public Zi(){//super();//這一行不再調用this(123);//3.在本類的構造方法中,訪問本類的另一個構造方法。本類的無參構造,調用本類的有參構造//this(1,2);//報錯,必須唯一}public Zi(int m){this(1,2);}public Zi(int m,int n){//this(2);//不能來回調用}public void showNum(){int num = 10;//局部變量System.out.println(num);//10System.out.println(this.num);//20本類中的成員變量System.out.println(super.num);//30父類中的成員變量}public void methodA(){System.out.println("aaa");}public void methodB(){this.methodA();//2.在本類的成員方法中,訪問本類的另一個成員方法。System.out.println("bbb");} }11.super與this關鍵字圖解
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ha17nORa-1608862409658)(F:\Java\Learn\day15\day22.assets\image-20201225093723036.png)]
package Demo2210;public class Fu {int num = 10;public void method() {System.out.println("父類方法");} } package Demo2210;public class Zi extends Fu {int num = 20;@Overridepublic void method() {super.method();System.out.println("子類方法");}public void show() {int num = 30;System.out.println(num);//30System.out.println(this.num);//20System.out.println(super.num);//10} } package Demo2210;public class Demo {public static void main(String[] args) {Zi zi = new Zi();zi.show();zi.method();//父類方法、子類方法} }12.java繼承的三個特點
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OHVqfmBX-1608862409661)(F:\Java\Learn\day15\day22.assets\image-20201225094652976.png)]
總結
以上是生活随笔為你收集整理的第22天学习Java的笔记-继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第21天学习Java的笔记-数学工具类A
- 下一篇: 如何卸载干净32位的Office