1. 程式人生 > 實用技巧 >Java基礎篇之繼承與方法重寫

Java基礎篇之繼承與方法重寫

1.繼承的解釋:Java語言中繼承體現的是一種“is a”的關係,Java僅支援單繼承 ,但可以多層繼承,即子類繼承父類,父類繼承祖父類

2.繼承的注意事項

       1.子類只能繼承父類中非私有的成員變數和成員方法

       2.子類不能繼承父類的構造方法,但可以通過super關鍵字去訪問父類的構造方法

     注意:super的用法和this很像,this代表本類物件的引用,super代表父類儲存空間的標識,可以理解為父類引用,可以操作父類的成員

        子類中所有的構造方法預設都會先訪問父類中無參的構造方法,這是因為子類繼承自父類,所以要先初始化父類,這樣子類才能用父類中的成員變數,綜上,子類的每一個構造方法        第一句肯定是super();呼叫父類的無參構造方法。如果父類沒有無參的構造方法,那麼子類的構造方法就會報錯,解決辦法:

                                  1.加入一個父類的無參構造方法

                                  2.通過使用super關鍵字去顯示的呼叫父類的帶參構造方法,例如父類中沒有無參構造方法,但有一個帶String name的構造方法:public Person(String name){},此時子類的構造方法第一行可以呼叫這個父類帶參的構造方法:super("張三")。 this(...)和super(...)必須在第一行,避免多次初始化父類。

3.方法重寫:子類中出現了和父類中一模一樣的方法,包括方法名,引數,返回值型別等都一模一樣,

      如果子類中的方法和父類中的方法一模一樣,就近原則會先使用子類的方法。

4.方法重寫的注意事項:父類中的私有方法不能被重寫,因為子類無法繼承父類的私有方法

           子類重寫父類中的方法時,訪問許可權不能更低,,即子類方法的訪問修飾符許可權必須要大於等於父類的訪問修飾符,所以如果父類中的該方法被public修飾,那麼子類重寫該方法,訪問修飾符也必須是public

           父類靜態方法,子類也必須通過靜態方法重寫,這與多型相關

5.程式碼展示

class Person2{
    private int age=10;
    String name="張三";
    
int score=90; public Person2(){ System.out.println("這是Person2的無參構造方法"); } public void eat(){ System.out.println("人都要吃飯"); } public void show(){ System.out.println("人都會思考"); } static{ System.out.println("靜態程式碼塊"); } private void method(){ System.out.println(age); System.out.println(name); } public void method2(){ System.out.println(age); System.out.println(name); } public void play(){ System.out.println("我是人,我可以玩"); } private void example(){ System.out.println("我是一個樣例"); } } class Student extends Person2 { int score=80; { System.out.println("構造程式碼塊"); } static{ System.out.println("student的靜態程式碼塊"); } public Student(){ System.out.println("我是Student的構造方法"); } public void method3(){ int score=70; System.out.println(score); System.out.println(this.score); System.out.println(super.score); } public void play(){ super.play(); System.out.println("我同時也是一名學生,還需要學習"); } } public class ExtendsDemo { public static void main(String[] args) { Student s=new Student();//靜態程式碼塊 student的靜態程式碼塊 這是Person2的無參構造方法 構造程式碼塊 我是Student的構造方法 s.eat();//人都要吃飯 s.show();//人都會思考 //s.method(); 無法訪問父類私有的成員方法 //int a=s.age;無法訪問父類私有的成員變數 s.method2();//通過父類中的成員方法訪問私有成員變數 10 張三 s.method3();//70 80 90 s.play();//我是人,我可以玩 我同時也是一名學生,還需要學習 } }