面型對象語言的三大特性之繼承

面嚮對象語言的三大特性繼承、封裝、多態,本篇文章講解繼承的相關內容。
一、基礎內容
(1)定義:繼承是面向對象三大特性之一,可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,追加屬相和方法。
java中類只支持單繼承,不支持多繼承;
java中類支持多層繼承。

(2)格式
public class 子類名 extends 父類名()
舉例如下:

/*
* 父類
* */
public class Person {
    String name;
    int age;
    String sex;

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public void self_Introduction(String sex,String name,int age){
        System.out.println("本人叫"+name+","+sex+"今年"+age+"歲!");
    }
}

/*
* 子類1
* */
public class Woman extends Person {
 public void selfclass(){
        System.out.println("真好!");
    }
}
/*
* 子類2
* */
public class Man extends Person {
 public void selfclass(){
        System.out.println("真好!");
    }
}

簡單編寫了父類方法Person,然後分別寫了兩個子類方法Man、Woman繼承父類,子類中沒有其他任何變量和方法,接下來寫個測試類,看看效果

/*
* 測試類
* */
public class Demo {
    public static void main(String[] args) {
        Man man = new Man();
        man.self_Introduction("男","張三",22);
        man.selfclass();
        Woman woman = new Woman();
        woman.self_Introduction("女","小紅",23);
        woman.selfclass2();
    }
}

在這裏插入圖片描述
這裏要總結一下子類的特點:
①子類可以調用父類的方法
②子類可以有自己的方法
(3)優點
①提高代碼的複用性(多個類相同的成員可以放到同一個類中)
②提高了代碼的維護性(如果方法代碼需要修改,修改一處即可)
(4)弊端
繼承讓類與類之間產生了關係,類的耦合性增強了,當父類發生改變時子類的實現也不得不跟着改變,削弱了子類的獨立性。
(5)什麼時候用繼承
繼承體現的是is-a(水果和蘋果,動物和綿羊)的關係,只有當兩個類A和B滿足,A是B的一種或者B是A的一種,就說明他們存在繼承關係,這個時候就可以考慮使用繼承實現,否則就不能濫用繼承。
(6)繼承中變量訪問的特點
在子類方法中訪問一個變量
首先在子類局部(方法內)範圍找
然後在子類成員(子類中)範圍找
最後到父類程豔範圍找
若找不到則報錯(比考慮父類的父類)
(7)super關鍵字
super關鍵字的用法和this關鍵字的用法相似
this:代表本類對象的引用
super:代表父類存儲空間的標識(可以理解爲父類對象的引用)
舉個例子

/*
* 父類
* */
public class Person {
    public int a = 1;
}

/*
* 子類
* */
public class Man extends Person {
    public int a = 2;
    public void selfclass(){
        System.out.println(super.a);
        System.out.println(a);
    }

    public static void main(String[] args) {
        Man man = new Man();
        man.selfclass();
    }
}

在這裏插入圖片描述
一個簡單的小例子,就可以看出super的實際作用,super和this一樣,作用的範圍
在這裏插入圖片描述
二、繼承中構造方法和成員方法訪問特點
(1)構造方法
子類中所有的構造方法默認都會訪問父類中無參的構造方法。
爲什麼?
①因爲子類會繼承父類中的數據,可能還會使用父類的數據,所以,子類初始化之前,一定要先完成父類數據的初始化
②每一個子類構造方法的第一次語句默認是:super()
如果父類中沒有無參構造方法,只有帶參構造方法,該怎麼辦?
①通過使用super關鍵字去顯示的調用父類的類參構造方法。
②在父類中自己提供一個無參構造方法(推薦使用)。
(2)成員方法
繼承中成員方法的訪問特點與繼承中變量訪問的特點有些類似。
通過子類對象訪問一個方法時
①子類成員範圍找
②父類成員範圍找
如果都沒有就報錯(不考慮父類的父類)
三、重寫
方法的重寫:子類中出現和父類中一模一樣的方發聲明。
應用:
當子類需要父類的功能,而功能主體類有自己特有的內容,可以重寫父類中的方法,這樣,即沿襲了父類的功能,有定義了子類特有的內容。
@Override這個註解可以幫助檢查重寫方法的方發聲明的正確性。
舉個例子

/*
* 父類
* */
public class Person {
    public void abc(){
        System.out.println("111");
    }
}
/*
* 子類
* */
public class Man extends Person {
    @Override
    public void abc(){
        System.out.println("1111");
    }
}

在這裏插入圖片描述
在這裏插入圖片描述
特殊說明:
①私有方法不能被重寫(父類私有成員子類是不能繼承的)。
②子類重寫的方法訪問權限不能低與父類中方法的訪問權限(public>默認>private )
綜上所述,就是對繼承的學習記錄!
下一節: 面型對象語言的三大特性之多態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章