1. 程式人生 > >方法重寫與繼承

方法重寫與繼承

                                                                                       繼承

繼承的概念:如果多個類中存在相同屬性和行為時,就可以將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行 為,只要繼承那個類即可。

格式:class 子類名 extends 父類名 {} 

例:

 父類:

public class Animal {

    Animal(int age,String name){
        this.age=age;
        this.name=name;

    }
   private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

   
    public void run(){
        System.out.println("跑步");

    }
}

子類:

public class Cat extends Animal {
    Cat(int age,String name){
        super(age,name);
    }
   
}

子類:

public class Dog extends Animal {
     Dog(int age,String name){
        super(age,name);
    }
}

測試類:

public class Demo1 {
    public static void main(String[] args) {
        Dog dog = new Dog(1,"蓋倫");
        Cat cat = new Cat(4,"劍聖");
        System.out.println("狗的名字為"+dog.getName());
        System.out.println("狗的年齡為"+dog.getAge());
        dog.eat();
       
        System.out.println("---------------------------------");
        System.out.println("貓的名字為"+cat.getName());
        System.out.println("貓的年齡為"+cat.getAge());
        cat.run();
      



    }
}

輸出為:

狗的名字為蓋倫
狗的年齡為1
跑步
---------------------------------
貓的名字為劍聖
貓的年齡為4
跑步
 

 

 

繼承的好處:提高了程式碼的複用性和維護性,使類與類之間產生關係,是多型的前提。

繼承的弊端:類的耦合性提高了。

開發的原則:高內聚,低耦合。
                      耦合:類與類的關係。
                       內聚:就是自己完成某件事情的能力。

Java裡繼承的特點:只支援單繼承,不支援多繼承,但支援多層繼承。

需注意的事項:子類只能繼承父類所有非私有的成員;子類不能繼承父類的構造方法,但是可以通過super關鍵字去訪問父類構                             造方法;不要為了部分功能而去繼承。

繼承中成員變數/方法的關係:若子類成員變數/方法名與父類相同,則執行以下步驟:在子類的方法的區域性範圍找,有就使用;在子類的成員範圍找,有就使用; 在父類的成員範圍找,有就使用;如果還找不到,就報錯。

super關鍵字何時使用:當子類區域性範圍需要訪問父類變數時。

 super關鍵字代表的是父類儲存空間的標識。

繼承中的構造方法:

          子類中所有的構造方法預設都會訪問父類中空引數的構造方法。

           原因:因為子類會繼承父類中的資料,可能還會使用父類的資料。所以,子類初始化之前,一定要先完成父類資料的初始                       化。

           注意:若父類中沒有無參構造方法,則子類應:1.在父類中新增一個無參的構造方法。

                                                                                       2.子類通過super去顯示呼叫父類其他的帶參的構造方法。

                                                                                       3.子類通過this去呼叫本類的其他構造方法,本類其他構造也必須首先訪                                                                                               問了父類構造。

例:

public class GrandFather {
    GrandFather(){

    }
    int a1=1;
    int a2=2;
    int b1=1;
    int b2=0;
}

public class Father extends GrandFather {
    Father(){

    }

    public int add(int a1,int a2){
        return a1+a2;
    }
    public int reduce(int b1,int b2){
        return super.b1-super.b2;

    }
}

public class Son extends Father{
    public static void main(String[] args) {

        Son son = new Son();
        Son son1 = new Son();
        System.out.println(son.add(3,4));
        System.out.println(son1.reduce(4,2));
    }
}

輸出結果為:7
                     1

分析:Father類中的add方法使用的是傳入的資料,reduce方法使用的是父類中的引數。

 


                                                                                     方法重寫

何時使用:子類中出現了和父類中一模一樣的方法宣告(方法名,引數列表,返回值型別),也被稱為方法覆蓋,方法複寫。

應用:當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法。 這樣,即沿襲了父類的功能,又               定義了子類特有的內容。

注意:父類中的私有方法不能被重寫;子類若要重寫,許可權不能比父類低。

例:

public class Animal {

public void eat(){
    System.out.println("吃飯");

}

}


public class Cat extends Animal {
    public void eat(){
        System.out.println("貓吃魚");
    }
}

public class Dog extends Animal {
    public void eat(){
        System.out.println("狗吃骨頭");
    }
}

public class Demo1 {
    public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.eat();
cat.eat();

}

}

輸出為:狗吃骨頭

               貓吃魚

 

final關鍵字:

                作用:有時候我們不想讓子類去重寫父類的方法.這時就需要使用 final關鍵字。

                作用範圍:可以修飾類,變數,成員方法。

                 特點:被final修飾的類不能被繼承;被修飾的方法不能被重寫;被修飾的變數不能被重新賦值。

                  注意:若修飾的是基本型別,則是數值不變;弱修飾引用型別,則是地址值不變