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

Java三大特性之繼承詳解

 更新時間:2022年10月11日 14:15:40   作者:共飲一杯無  
繼承:就是子類繼承父類的屬性和行為,使得子類對象具有與父類相同的屬性、相同的行為。本文將來和大家詳細說說Java中的繼承,需要的可以了解一下

概述

由來

多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那么多個類無需再定義這些屬性和行為,只要繼承那一個類即可。如圖所示:

其中,多個類可以稱為子類,單獨那一個類稱為父類、超類(superclass)或者基類。 繼承描述的是事物之間的所屬關系,這種關系是: is-a 的關系。例如,圖中兔子屬于食草動物,食草動物屬于動 物??梢姡割惛ㄓ?,子類更具體。我們通過繼承,可以使多種事物之間形成一種關系體系。

定義

繼承:就是子類繼承父類的屬性和行為,使得子類對象具有與父類相同的屬性、相同的行為。子類可以直接 訪問父類中的非私有的屬性和行為。

好處

  • 提高代碼的復用性。
  • 類與類之間產生了關系,是多態(tài)的前提。

繼承的格式

通過 extends 關鍵字,可以聲明一個子類繼承另外一個父類,定義格式如下:

class 父類 {
...
}
class 子類 extends 父類 {
...
}

繼承演示,代碼如下:

/*
* 定義員工類Employee,做為父類
*/
class Employee {
    String name; // 定義name屬性
    // 定義員工的工作方法
    public void work() {
        System.out.println("盡心盡力地工作");
    }
}
/*
* 定義講師類Teacher 繼承 員工類Employee
*/
class Teacher extends Employee {
    // 定義一個打印name的方法
    public void printName() {
        System.out.println("name=" + name);
    }
}
/*
* 定義測試類
*/
public class ExtendDemo01 {
    public static void main(String[] args) {
        // 創(chuàng)建一個講師類對象
        Teacher t = new Teacher();
        // 為該員工類的name屬性進行賦值
        t.name = "小明";
        // 調用該員工的printName()方法
        t.printName(); // name = 小明
        // 調用Teacher類繼承來的work()方法
        t.work(); // 盡心盡力地工作
    }
}

繼承后的特點—成員變量

當類之間產生了關系后,其中各類中的成員變量,又產生了哪些影響呢?

成員變量不重名

如果子類父類中出現不重名的成員變量,這時的訪問是沒有影響的。代碼如下:

class Fu {
    // Fu中的成員變量。
    int num = 5;
}
class Zi extends Fu {
    // Zi中的成員變量
    int num2 = 6;
    // Zi中的成員方法
    public void show() {
        // 訪問父類中的num,
        System.out.println("Fu num="+num); // 繼承而來,所以直接訪問。
        // 訪問子類中的num2
        System.out.println("Zi num2="+num2);
    }
}
class ExtendDemo02 {
    public static void main(String[] args) {
        // 創(chuàng)建子類對象
        Zi z = new Zi();
        // 調用子類中的show方法
        z.show();
    }
}

演示結果:

Fu num = 5
Zi num2 = 6

成員變量重名

如果子類父類中出現重名的成員變量,這時的訪問是有影響的。代碼如下:

class Fu {
    // Fu中的成員變量。
    int num = 5;
}
class Zi extends Fu {
    // Zi中的成員變量
    int num = 6;
    public void show() {
        // 訪問父類中的num
        System.out.println("Fu num=" + num);
        // 訪問子類中的num
        System.out.println("Zi num=" + num);
    }
}
class ExtendsDemo03 {
    public static void main(String[] args) {
        // 創(chuàng)建子類對象
        Zi z = new Zi();
        // 調用子類中的show方法
        z.show();
    }
}

演示結果:

Fu num = 6
Zi num = 6

子父類中出現了同名的成員變量時,在子類中需要訪問父類中非私有成員變量時,需要使用super 關鍵字,修飾 父類成員變量 。 使用格式:

super.父類成員變量名

子類方法需要修改,代碼如下:

class Zi extends Fu {
    // Zi中的成員變量
    int num = 6;
    public void show() {
        //訪問父類中的num
        System.out.println("Fu num=" + super.num);
        //訪問子類中的num
        System.out.println("Zi num=" + this.num);
    }
}

演示結果:

Fu num = 5
Zi num = 6

小貼士:Fu 類中的成員變量是非私有的,子類中可以直接訪問。若Fu 類中的成員變量私有了,子類是不能 直接訪問的。通常編碼時,我們遵循封裝的原則,使用private修飾成員變量,那么如何訪問父類的私有成員 變量呢?對!可以在父類中提供公共的getXxx方法和setXxx方法。

繼承后的特點—成員方法

當類之間產生了關系,其中各類中的成員方法,又產生了哪些影響呢?

成員方法不重名

如果子類父類中出現不重名的成員方法,這時的調用是沒有影響的。對象調用方法時,會先在子類中查找有沒有對應的方法,若子類中存在就會執(zhí)行子類中的方法,若子類中不存在就會執(zhí)行父類中相應的方法。代碼如下:

class Fu{
    public void show(){
        System.out.println("Fu類中的show方法執(zhí)行");
    }
}
class Zi extends Fu{
    public void show2(){
        System.out.println("Zi類中的show2方法執(zhí)行");
    }
}
public class ExtendsDemo04{
    public static void main(String[] args) {
        Zi z = new Zi();
        //子類中沒有show方法,但是可以找到父類方法去執(zhí)行
        z.show();
        z.show2();
    }
}

成員方法重名—重寫(Override)

如果子類父類中出現重名的成員方法,這時的訪問是一種特殊情況,叫做方法重寫 (Override)。 方法重寫 :子類中出現與父類一模一樣的方法時(返回值類型,方法名和參數列表都相同),會出現覆蓋效 果,也稱為重寫或者復寫。聲明不變,重新實現。 代碼如下:

class Fu {
    public void show() {
        System.out.println("Fu show");
    }
}
class Zi extends Fu {
    //子類重寫了父類的show方法
    public void show() {
        System.out.println("Zi show");
    }
}
public class ExtendsDemo05{
    public static void main(String[] args) {
        Zi z = new Zi();
        // 子類中有show方法,只執(zhí)行重寫后的show方法
        z.show(); // Zi show
    }
}

重寫的應用

子類可以根據需要,定義特定于自己的行為。既沿襲了父類的功能名稱,又根據子類的需要重新實現父類方法,從而進行擴展增強。比如新的手機增加來電顯示頭像的功能,代碼如下:

class Phone {
    public void sendMessage(){
        System.out.println("發(fā)短信");
    }
    public void call(){
        System.out.println("打電話");
    }
    public void showNum(){
        System.out.println("來電顯示號碼");
    }
}
//智能手機類
class NewPhone extends Phone {
    //重寫父類的來電顯示號碼功能,并增加自己的顯示姓名和圖片功能
    public void showNum(){
        //調用父類已經存在的功能使用super
        super.showNum();
        //增加自己特有顯示姓名和圖片功能
        System.out.println("顯示來電姓名");
        System.out.println("顯示頭像");
    }
}
    public class ExtendsDemo06 {
    public static void main(String[] args) {
    // 創(chuàng)建子類對象
    NewPhone np = new NewPhone();
    // 調用父類繼承而來的方法
    np.call();
    // 調用子類重寫的方法
    np.showNum();
    }
}

小貼士:這里重寫時,用到super.父類成員方法,表示調用父類的成員方法。

注意事項

  • 子類方法覆蓋父類方法,必須要保證權限大于等于父類權限。
  • 子類方法覆蓋父類方法,返回值類型、函數名和參數列表都要一模一樣。

繼承后的特點—構造方法

當類之間產生了關系,其中各類中的構造方法,又產生了哪些影響呢? 首先我們要回憶兩個事情,構造方法的定義格式和作用。

  • 構造方法的名字是與類名一致的。所以子類是無法繼承父類構造方法的。
  • 構造方法的作用是初始化成員變量的。所以子類的初始化過程中,必須先執(zhí)行父類的初始化動作。子類的構

造方法中默認有一個super() ,表示調用父類的構造方法,父類成員變量初始化后,才可以給子類使用。代碼如下:

class Fu {
    private int n;
    Fu(){
        System.out.println("Fu()");
    }
}

class Zi extends Fu {
    Zi(){
        // super(),調用父類構造方法
        super();
        System.out.println("Zi()");
    }
}
public class ExtendsDemo07{
    public static void main (String args[]){
        Zi zi = new Zi();
    }
}

輸出結果:

Fu()
Zi()

到此這篇關于Java三大特性之繼承詳解的文章就介紹到這了,更多相關Java繼承內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java基礎之類型封裝器示例

    Java基礎之類型封裝器示例

    這篇文章主要介紹了Java基礎之類型封裝器,結合實例形式分析了java類型封裝相關原理與操作技巧,需要的朋友可以參考下
    2019-08-08
  • 一文詳解如何使用Java分割PDF文件

    一文詳解如何使用Java分割PDF文件

    PDF是一種用于顯示和打印文檔的文件格式,它非常廣泛地應用于電子書籍、報告、合同等文件的傳遞和共享,這篇文章主要給大家介紹了關于如何使用Java分割PDF文件的相關資料,需要的朋友可以參考下
    2024-01-01
  • Java自動解壓文件實例代碼

    Java自動解壓文件實例代碼

    Java自動解壓文件實例代碼,需要的朋友可以參考一下
    2013-04-04
  • 解決IDEA項目project包目錄消失的問題

    解決IDEA項目project包目錄消失的問題

    這篇文章主要介紹了解決IDEA項目project包目錄消失的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java數據結構之數組(動力節(jié)點之Java學院整理)

    Java數據結構之數組(動力節(jié)點之Java學院整理)

    這篇文章主要介紹了Java數據結構之數組(動力節(jié)點之Java學院整理)的相關資料,包括創(chuàng)建和內存分配,數組封裝后的使用等,需要的朋友參考下吧
    2017-04-04
  • java獲取昨天日期字符串的方法

    java獲取昨天日期字符串的方法

    這篇文章主要介紹了java獲取昨天日期字符串的方法,涉及java針對日期與時間的運算與轉換等相關操作技巧,需要的朋友可以參考下
    2016-08-08
  • idea中使用git合并分支實踐

    idea中使用git合并分支實踐

    這篇文章主要介紹了idea中使用git合并分支實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中I/O流讀取數據不完整的問題解決

    Java中I/O流讀取數據不完整的問題解決

    本文主要介紹了ava中I/O流讀取數據不完整的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • java實現文件上傳的詳細步驟

    java實現文件上傳的詳細步驟

    文件上傳是用戶將本地文件通過Web頁面提交到服務器的過程,涉及客戶端、服務器端、上傳表單等組件,在SpringBoot中,通過MultipartFile接口處理上傳文件,并將其保存在服務器,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • java中注解的原理解析

    java中注解的原理解析

    這篇文章主要介紹了java中注解的原理解析,java 注解又稱 Java 標注,是 JDK5.0 引入的一種注釋機制,可以理解為為某個東西,打個標記的記號,等要使用這個注解時,可以通過反射獲取標注里面的內容,需要的朋友可以參考下
    2023-10-10

最新評論

正蓝旗| 秦安县| 濉溪县| 定陶县| 隆德县| 上饶市| 明光市| 大庆市| 镇平县| 南溪县| 安龙县| 安丘市| 朝阳市| 固安县| 仲巴县| 芜湖市| 怀仁县| 道孚县| 天镇县| 四平市| 彭山县| 恩施市| 从化市| 株洲县| 平罗县| 连州市| 淄博市| 平果县| 衡南县| 托克逊县| 甘德县| 定南县| 新宁县| 东海县| 沛县| 阜新| 垣曲县| 津南区| 陵水| 宣城市| 邢台市|