Java的第八天(類的繼承、super關鍵字的使用、方法的重寫)

39.類的繼承java

描述類的時候,咱們若是發現有幾個類有重複的屬性和方法,咱們就能夠採用繼承的方法來設計ide

使用extends關鍵字來繼承this

語法:設計

class 子類 extends 父類{對象

    子類屬性繼承

    子類方法內存

}資源

特色:(1)子類會把父類全部屬性和方法繼承下來(暫時不考慮final)get

          (2)子類使用extends關鍵字繼承父類的共同屬性之外。子類話能夠有本身特有的屬性和方法;數學

          (3)父類更通用,子類更具體

          (4)子類只能得到符類中的非private的屬性,若是想要繼承就得提供公共的set和get的方法。私有的方法是沒法繼承下來的;

          (5)java中只能作單繼承。能夠多級繼承不能多繼承。

class ChineseTeacher{
    String name;
    private int age;
    public void setAge(int myAge){
        age=myAge;
    }
    public int getAge(){
        return age;
    }
    public void speek(){
        System.out.println("老師在講課");
    }
}
/*類的繼承語法:
class 子類 extends 父類{
    子類屬性
    子類方法
}
*/
class MathTheacher extends ChineseTeacher{
    boolean isMarry;
    public void mathTeach(){
        System.out.println(this.getAge()+"歲的"+name+"教數學");
    }
}
public class Teacher{
    public static void main(String[] args){
        MathTheacher m=new MathTheacher();
        m.name="大可愛";
        m.setAge(27);
        int age=m.getAge();
        m.isMarry=true;
        m.speek();
        m.mathTeach();
    }
}

//發現一個問題,當我把主方法放在MathTeacher下建立m的時候編譯是沒有問題的可是運行Mathteacher卻出現錯誤: 找不到或沒法加載主類 MathTeacher,不知道爲何這樣不能夠

40.類的繼承的內存結構

總結:在類的繼承結構中,若是建立一個子類的對象,那麼在子類的對象內部建立一個父類的對象,若是經過子類的對象訪問屬性的時候,就會到父類的對象中去查找,若是調用方法的時候也是同樣的,若是子類中沒有,也會到父類中查找。

42.super關鍵字的使用

(1)子類經過默認構造器實例化的過程當中父類的構造器先被調用,而後再調用子類的構造器,在子類構造器內部默認的調用super();    

        public JavaTeacher{

            super();//隱藏調用父類的構造器

            System.out.println("子類構造器被調用");

        }

注意:若是父類帶有有參數的構造器,而且沒有顯式的定義父類的默認構造器,默認構造器被覆蓋,致使子類的構造器沒法經過super()來作調用,就會編譯報錯,須要顯式的定義父類的默認的構造器

(2)若是子類的構造器中調用了父類中的有參數的構造器,默認的super()調用就不會有了,不能在子類的構造器中調用兩個super(..);

(3)super(..)調用必須放在方法的第一行

(4)super 能夠表示父類的引用,使用super和this區分父類和子類中同名的屬性,在子類中訪問屬性的查找順序首先在子類中查找指定的屬性名字,若是子類中沒有該屬性,那麼就去父類中查找該屬性,方法也是同樣,可是能夠經過super對父類的引用來調用父類的方法。

重點:1.理解super(...)對於父類構造器的調用;2.super表示子類內部的那個父類的對象引用

對比this關鍵字:1.表明當前類的指定實例的引用;2.能夠區分同名的屬性和局部變量;3.經過This能夠調用同類中的構造器(this(),this(...));4.調用本類裏面的屬性,this.屬性名,this.方法名();

class Teacher{
    String name="小白兔";
    int age=20;
    public Teacher(){
        System.out.println("父類構造器被調用");
    }
}
class ArtTeacher extends Teacher{
    String name="小老虎";
    int age=22;
    public ArtTeacher(){
        //super();//隱藏調用父類的構造器
        System.out.println("子類構造器被調用");
    }
    public void introduce(){
        System.out.println(this.name+super.age);
    }
}
public class Test{
    public static void main(String[] args){
        ArtTeacher A=new ArtTeacher();
        A.introduce();
    }
}

43.方法的重寫

在子類繼承父類時,子類的方法和父類的方法相同(訪問修飾先支付,返回值類型,方法名,參數列表),方法體不一樣,這種子類的方法將父類的方法覆蓋叫重寫

重寫和重載的區別:

重寫:(override)在子類的繼承中有相同的方法,惟一布通的就是方法體,通常是父類的該方法知足不了子類的需求全部才發生重寫;

重載:(overload)重載是在同一個類中,有着相同的方法名可是參數的數據類型或者參數的個數不一樣這兩個方法就是重載,母的是節省類中命名資源和提升代碼的可讀性;

相關文章
相關標籤/搜索