最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java由淺入深帶你精通繼承super

 更新時間:2022年03月22日 16:41:47   作者:K穩(wěn)重  
繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為

什么是繼承

面向?qū)ο蟮奶卣鳎?/p>

封裝:不必要公開的數(shù)據(jù)成員和方法,使用private關(guān)鍵字進行修飾。意義:安全性。

背景

代碼中創(chuàng)建的類, 主要是為了抽象現(xiàn)實中的一些事物(包含屬性和方法).

有的時候客觀事物之間就存在一些關(guān)聯(lián)關(guān)系, 那么在表示成類和對象的時候也會存在一定的關(guān)聯(lián)

例如, 設(shè)計一個類表示動物

注意,:我們可以給每個類創(chuàng)建一個單獨的 java 文件. 類名必須和 .java 文件名匹配(大小寫敏感).

class Dag {
    public String name;
    public int age;
 
    public void eat(){
        System.out.println("eat()");
    }
 
}
class Bird{
    public String name;
    public int age;
    public String wing;
 
    public void eat(){
        System.out.println("eat()");
    }
 
    public void fly(){
        System.out.println("fly");
 
    }

定義了兩個類,一個是Dag類,一個是Bird類

對比一下上述的兩個類:

我們會發(fā)現(xiàn)它們之間有一些共性,我們就可以把他們相同的地方抽象出來重新定義一個類:

class Animal{
    public String name;
    public int age;
 
    public void eat(){
        System.out.println("eat()");
    }
}
class Dag {
    public String name;
    public int age;
 
    public void eat(){
        System.out.println("eat()");
    }
 
}
class Bird{
    public String name;
    public int age;
    public String wing;
 
    public void eat(){
        System.out.println("eat()");
    }
 
    public void fly(){
        System.out.println("fly");
 
    }
    
}

?這三個類都具備一個相同的 eat 方法, 而且行為是完全一樣的.

這三個類都具備一個相同的 name 屬性, 而且意義是完全一樣的.

從邏輯上講, Dag 和 Bird 都是一種 Animal.

此時我們就可以讓 Dag 和 Bird 分別繼承 Animal 類, 來達到代碼重用的效果

此時, Animal 這樣被繼承的類, 我們稱為 父類 , 基類 或 超類, 對于像Dag?和 Bird 這樣的類, 我們稱為 子類, 派生類 和現(xiàn)實中的兒子繼承父親的財產(chǎn)類似, 子類也會繼承父類的字段和方法, 以達到代碼重用的效果.

語法規(guī)則

基本語法:

class 子類 extends 父類 {

}

使用 extends 指定父類

Java 中一個子類只能繼承一個父類 (而C++/Python等語言支持多繼承)

子類會繼承父類的所有 public 的字段和方法

對于父類的 private 的字段和方法, 子類中是無法訪問的

子類的實例中, 也包含著父類的實例. 可以使用 super 關(guān)鍵字得到父類實例的引用

對于上面的代碼, 可以使用繼承進行改進. 此時我們讓 Dag 和 Bird 繼承自 Animal 類, 那么 Dag?在定義的時候就不必再 寫 name 字段和 eat 方法.?

class Animal{
    public String name;
    public int age;
 
    public void eat(){
        System.out.println("eat()");
    }
}
class Dag extends Animal {
 
 
}
class Bird extends Animal{
 
    public String wing;
 
    public void fly(){
        System.out.println("fly");
 
    }
 
}

因為子類繼承了父類的字段和方法,所以我們在main函數(shù)里就這樣寫:

extends 英文原意指 "擴展". 而我們所寫的類的繼承, 也可以理解成基于父類進行代碼上的 "擴展".

例如我們寫的 Bird 類, 就是在 Animal 的基礎(chǔ)上擴展出了 fly 方法.

如果我們把age 改成 private, 那么此時子類就不能訪問了

因為現(xiàn)在age是私有的,不能在子類當(dāng)中使用age

super關(guān)鍵字

子類構(gòu)造的同時,要先幫助父類來進行構(gòu)造

當(dāng)我們這樣寫就不報錯了,這是為什么呢?

super三種用法://不能出現(xiàn)在靜態(tài)方法當(dāng)中,因為super相當(dāng)于父類對象的引用

1、super():調(diào)用父類的構(gòu)造方法

2、super.function():調(diào)用父類的普通方法

3、super.data:調(diào)用父類的成員屬性

protected 關(guān)鍵字

剛才我們發(fā)現(xiàn), 如果把字段設(shè)為 private, 子類不能訪問. 但是設(shè)成 public, 又違背了我們 "封裝" 的初衷. 兩全其美的辦法就是 protected 關(guān)鍵字

對于類的調(diào)用者來說, protected 修飾的字段和方法是不能訪問的

對于類的 子類 和 同一個包的其他類 來說, protected 修飾的字段和方法是可以訪問的

// Animal.java 
public class Animal { 
 protected String name; 
 public Animal(String name) {
        this.name = name; 
 } 
 public void eat(String food) { 
 System.out.println(this.name + "正在吃" + food); 
 } 
} 
// Bird.java 
public class Bird extends Animal { 
 public Bird(String name) { 
 super(name); 
 } 
 public void fly() { 
 // 對于父類的 protected 字段, 子類可以正確訪問
 System.out.println(this.name + "正在飛 ︿( ̄︶ ̄)︿"); 
 } 
} 
// Test.java 和 Animal.java 不在同一個 包 之中了. 
public class Test { 
 public static void main(String[] args) { 
 Animal animal = new Animal("小動物"); 
 System.out.println(animal.name); // 此時編譯出錯, 無法訪問 name 
 } 
} 

Java 中對于字段和方法共有四種訪問權(quán)限

private: 類內(nèi)部能訪問, 類外部不能訪問

默認(也叫包訪問權(quán)限): 類內(nèi)部能訪問, 同一個包中的類可以訪問, 其他類不能訪問.

protected: 類內(nèi)部能訪問, 子類和同一個包中的類可以訪問, 其他類不能訪問.

public : 類內(nèi)部和類的調(diào)用者都能訪問

final 關(guān)鍵字

曾經(jīng)我們學(xué)習(xí)過 final 關(guān)鍵字, 修飾一個變量或者字段的時候, 表示 常量 (不能修改).

final int a = 10;

a = 20; // 編譯出錯?

final 關(guān)鍵字也能修飾類, 此時表示被修飾的類就不能被繼承.

final public class Animal { 
 ... 
} 
public class Bird extends Animal { 
 ... 
} 
// 編譯出錯
Error:(3, 27) java: 無法從最終com.bit.Animal進行繼承

final 關(guān)鍵字的功能是 限制 類被繼承

"限制" 這件事情意味著 "不靈活". 在編程中, 靈活往往不見得是一件好事. 靈活可能意味著更容易出錯. 是用 final 修飾的類被繼承的時候, 就會編譯報錯, 此時就可以提示我們這樣的繼承是有悖這個類設(shè)計的初衷的

我們平時是用的 String 字符串類, 就是用 final 修飾的, 不能被繼承

到此這篇關(guān)于Java由淺入深帶你精通繼承super的文章就介紹到這了,更多相關(guān)Java 繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 十大排序算法之希爾排序刨析

    Java 十大排序算法之希爾排序刨析

    希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經(jīng)過改進之后的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)的第一批算法之一。本文會以圖解的方式詳細介紹希爾排序的基本思想及其代碼實現(xiàn)
    2021-11-11
  • java利用DFA算法實現(xiàn)敏感詞過濾功能

    java利用DFA算法實現(xiàn)敏感詞過濾功能

    在最近的開發(fā)中遇到了敏感詞過濾,便去網(wǎng)上查閱了很多敏感詞過濾的資料,在這里也和大家分享一下自己的理解。下面這篇文章主要給大家介紹了關(guān)于java利用DFA算法實現(xiàn)敏感詞過濾功能的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • 基于SpringBoot實現(xiàn)文件秒傳功能

    基于SpringBoot實現(xiàn)文件秒傳功能

    在開發(fā)Web應(yīng)用時,文件上傳是一個常見需求,然而,當(dāng)用戶需要上傳大文件或相同文件多次時,會造成帶寬浪費和服務(wù)器存儲冗余,此時可以使用文件秒傳技術(shù)通過識別重復(fù)文件,本文就給大家介紹了如何基于SpringBoot實現(xiàn)文件秒傳功能,需要的朋友可以參考下
    2025-04-04
  • springboot整合Excel填充數(shù)據(jù)代碼示例

    springboot整合Excel填充數(shù)據(jù)代碼示例

    這篇文章主要給大家介紹了關(guān)于springboot整合Excel填充數(shù)據(jù)的相關(guān)資料,文中通過代碼示例介紹的非常詳細,對大家學(xué)習(xí)或者使用springboot具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • java?http請求獲取圖片并返回文件流給前端的方法步驟

    java?http請求獲取圖片并返回文件流給前端的方法步驟

    作為一名Java后端開發(fā)者,掌握如何從后端返回文件流至前端是基本技能之一,這篇文章主要介紹了java?http請求獲取圖片并返回文件流給前端的方法步驟,需要的朋友可以參考下
    2024-09-09
  • Java集合類之Map集合的特點及使用詳解

    Java集合類之Map集合的特點及使用詳解

    這篇文章主要為大家詳細介紹一下Java集合類中Map的特點及使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-08-08
  • maven鏡像倉庫的配置過程

    maven鏡像倉庫的配置過程

    本文詳細介紹了MAVEN_HOME的配置步驟、Path環(huán)境變量的設(shè)置、檢測配置是否成功的方法、修改默認的maven依賴包下載路徑以及配置阿里鏡像倉庫的路徑,同時分享了作者在配置過程中遇到的問題,如命令不識別、版本不匹配等,并提供了解決方案
    2024-09-09
  • Spring Integration 實現(xiàn)消息驅(qū)動的詳細步驟

    Spring Integration 實現(xiàn)消息驅(qū)動的詳細步驟

    Spring Integration是一個用于構(gòu)建消息驅(qū)動的中間件輕量級框架,它提供了一種模型和工具,用于在Spring應(yīng)用程序中實現(xiàn)企業(yè)集成模式,這篇文章主要介紹了Spring Integration 實現(xiàn)消息驅(qū)動,需要的朋友可以參考下
    2024-05-05
  • IDEA如何修改配置文件的存放位置

    IDEA如何修改配置文件的存放位置

    這篇文章主要介紹了IDEA如何修改配置文件的存放位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java 線程同步詳細介紹及實例代碼

    java 線程同步詳細介紹及實例代碼

    這篇文章主要介紹了java 線程同步詳細介紹及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論

鹤壁市| 内丘县| 龙井市| 红桥区| 富民县| 本溪市| 龙泉市| 红安县| 衡阳县| 渭源县| 合作市| 焉耆| 烟台市| 普陀区| 呈贡县| 全州县| 武夷山市| 万盛区| 沭阳县| 临泽县| 东乌珠穆沁旗| 枞阳县| 拜城县| 麻城市| 拜城县| 句容市| 新野县| 定襄县| 利津县| 油尖旺区| 武冈市| 平果县| 临潭县| 故城县| 齐齐哈尔市| 特克斯县| 册亨县| 融水| 桑日县| 河曲县| 乐亭县|