1. 程式人生 > 其它 >Java學習總結 【繼承】

Java學習總結 【繼承】

技術標籤:java繼承

繼承

特性

封裝 繼承 多型 是面向物件程式語言的三大特性,三個特性的目的都是為了讓類的呼叫者減少對類的實現者使用成本,因而可以說它們是非常的重要。

繼承

1.繼承背景

程式碼中可以用抽象現實中的事物,比如動物(包含①動物的自身屬性比如:毛髮顏色、品種、狗腿的數量等②動物的行為(在這裡稱作方法),比如:會跳、會吃、會咬人等等。有時動物A與動物B之間存在共性也可以說是一些關聯,也就是說他們有相同的屬性和行為,那麼表示成類和物件時候,動物A、動物B與動物大類之間存在一定關聯,我們可以在此基礎上衍生出繼承特性。

2.繼承示例

class
Animal{ public String name; private int age; //private封裝後,age只能在類內訪問 public Animal(){ } public Animal(String name){ this.name = name; } public void eat(){ System.out.println(this.name+"->eat"); //this表示當前物件的引用 } }
class Cat {
public String name; public int age; public Cat(String name){ this.name = name; } public void eat(){ System.out.println("Cat->eat"); } }
class Bird {
    public String name;
    public int age;

    public Bird(String name){
        this.name =
name; } public void eat(){ System.out.println("Bird->eat"); } public void fly(){ System.out.println(this.name+"正在起飛。。。"); } }

我們發現程式碼出現大量的冗餘內容,Animal Cat Bird三個類之間存在一定關聯,都有相同eat方法,都有name和age屬性,這種情況下,可以說Cat和Bird繼承了Animal類,如此一來到達程式碼重用效果。
Animal:被繼承的類,稱為父類、基類、超類
Cat與Bird:子類、派生類


上面的程式碼用繼承改進後,我們發現共同的屬性和方法不必再寫,程式碼看起來不再繁瑣。

class Animal{
    public String name;
    private int age; 
    
    public Animal(){
    }

    public Animal(String name){
        this.name = name;
    }

    public void eat(){
        System.out.println(this.name+"->eat");
    }

}

class Cat {
    public Cat(String name){
        super(name);
    }
}

class Bird {
    
    public Bird(String name){
        super(name);
    }
    public void fly(){
        System.out.println(this.name+"正在起飛。。。");
    }
}

3.繼承語法

①class 子類 extends 父類{ }
②java中一個子類只能繼承一個父類,不支援多繼承
③子類會繼承父類所有方法和欄位,對於父類中private方法而言,子類繼承但無法訪問
④子類的例項中,也包含著父類的例項,用super關鍵字可以得到父類例項的引用
⑤extends本意為擴充套件,繼承可以理解為基於一個類再擴充套件別的類

4.protected關鍵字

出於封裝思想,protected關鍵字擯棄了private缺點(子類無法訪問父類)和public缺點(任何情況均能訪問)
特點:protected修飾的成員變數和方法,類的呼叫者無法訪問
   繼承關係上,子類可以訪問protected修飾的成員變數和方法;同一個包的不同類可以訪問protected。

5.欄位和方法訪問的4種許可權

範圍privatedefaultprotectedpublic
同一個包中同一個類
同一個包中不同類
不同包中的子類
不同包中的非子類

default被稱為包訪問許可權

6.final關鍵字

我們知道final修飾變數時,表示這個變數值不能發生改變;同樣final修飾方法時,表示方法成為密封方法不能被重寫;final修飾類時,類被限制成為密封類,不能被繼承。

7.super用法

子類繼承父類的方法和欄位,但是對於類本身構造方法而言,子類構造時候,先要幫助父類進行構造。如何幫助構造呢?

子類構造方法內部,先通過super()顯示父類的構造方法,再構造子類本身,所以能看出父類的構造方法是顯示在子類中的,而不是被子類所繼承。
super代表父類物件的引用,這裡需要注意的是,super無法在static方法中使用;此外與this有區別,this代表當前物件的引用。