欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

什么是繼承

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

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

背景

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

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

例如, 設(shè)計(jì)一個(gè)類表示動(dòng)物

注意,:我們可以給每個(gè)類創(chuàng)建一個(gè)單獨(dú)的 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");
 
    }

定義了兩個(gè)類,一個(gè)是Dag類,一個(gè)是Bird類

對(duì)比一下上述的兩個(gè)類:

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

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");
 
    }
    
}

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

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

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

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

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

語法規(guī)則

基本語法:

class 子類 extends 父類 {

}

使用 extends 指定父類

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

子類會(huì)繼承父類的所有 public 的字段和方法

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

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

對(duì)于上面的代碼, 可以使用繼承進(jìn)行改進(jìn). 此時(shí)我們讓 Dag 和 Bird 繼承自 Animal 類, 那么 Dag?在定義的時(shí)候就不必再 寫 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");
 
    }
 
}

因?yàn)樽宇惱^承了父類的字段和方法,所以我們?cè)趍ain函數(shù)里就這樣寫:

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

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

如果我們把a(bǔ)ge 改成 private, 那么此時(shí)子類就不能訪問了

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

super關(guān)鍵字

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

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

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

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)鍵字

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

對(duì)于類的 子類 和 同一個(gè)包的其他類 來說, 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() { 
 // 對(duì)于父類的 protected 字段, 子類可以正確訪問
 System.out.println(this.name + "正在飛 ︿( ̄︶ ̄)︿"); 
 } 
} 
// Test.java 和 Animal.java 不在同一個(gè) 包 之中了. 
public class Test { 
 public static void main(String[] args) { 
 Animal animal = new Animal("小動(dòng)物"); 
 System.out.println(animal.name); // 此時(shí)編譯出錯(cuò), 無法訪問 name 
 } 
} 

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

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

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

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

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

final 關(guān)鍵字

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

final int a = 10;

a = 20; // 編譯出錯(cuò)?

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

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

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

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

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

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

相關(guān)文章

  • SpringBoot?HikariCP配置項(xiàng)及源碼解析

    SpringBoot?HikariCP配置項(xiàng)及源碼解析

    這篇文章主要為大家介紹了SpringBoot?HikariCP配置項(xiàng)及源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 使用springboot開發(fā)的第一個(gè)web入門程序的實(shí)現(xiàn)

    使用springboot開發(fā)的第一個(gè)web入門程序的實(shí)現(xiàn)

    這篇文章主要介紹了使用springboot開發(fā)的第一個(gè)web入門程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • MyBatis-plus報(bào)錯(cuò)Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required的解決方法

    MyBatis-plus報(bào)錯(cuò)Property ‘sqlSessionFactory‘ or 

    這篇文章主要給大家介紹了MyBatis-plus 報(bào)錯(cuò) Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required的兩種解決方法,如果遇到相同問題的朋友可以參考借鑒一下
    2023-12-12
  • Spring詳解使用注解開發(fā)流程

    Spring詳解使用注解開發(fā)流程

    這篇文章主要為大家詳細(xì)介紹了Spring如何使用注解開發(fā),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-05-05
  • Java基礎(chǔ)題新手練習(xí)(三)

    Java基礎(chǔ)題新手練習(xí)(三)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • IDEA2022創(chuàng)建SpringBoot項(xiàng)目的圖文教程

    IDEA2022創(chuàng)建SpringBoot項(xiàng)目的圖文教程

    本文主要介紹了IDEA2022創(chuàng)建SpringBoot項(xiàng)目的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Mybatis查詢方法如何實(shí)現(xiàn)沒有返回值

    Mybatis查詢方法如何實(shí)現(xiàn)沒有返回值

    這篇文章主要介紹了Mybatis查詢方法如何實(shí)現(xiàn)沒有返回值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java+MySQL 圖書管理系統(tǒng)

    Java+MySQL 圖書管理系統(tǒng)

    這篇文章是BUFFER.pwn同學(xué)分享的基于Java與MySQL的圖書管理系統(tǒng),需要的朋友可以參考一下
    2021-04-04
  • Java實(shí)現(xiàn)簡單郵件發(fā)送

    Java實(shí)現(xiàn)簡單郵件發(fā)送

    這篇文章主要介紹了Java實(shí)現(xiàn)簡單郵件發(fā)送的相關(guān)資料,實(shí)例講解了java郵件發(fā)送實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • JAVA使用geotools讀取shape格式文件的方法

    JAVA使用geotools讀取shape格式文件的方法

    這篇文章主要介紹了JAVA使用geotools讀取shape格式文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01

最新評(píng)論