91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的繼承如何實現

發布時間:2022-04-11 10:08:08 來源:億速云 閱讀:350 作者:iii 欄目:開發技術

本篇內容主要講解“Java中的繼承如何實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中的繼承如何實現”吧!

    一. 繼承

    眾所周知,我們Java語言是一種面向對象的編程語言,每當我們提到Java的特性,大家一定會在腦海里浮現出Java中的繼承、多態以及封裝。 

    1.1 繼承的實現

    • 繼承的概念

    繼承是面向對象三大特征之一,可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,以及追加屬性和方法。

    • 實現繼承的格式:繼承通過extends實現

    • 格式:class 子類 extends 父類 { }

    • 舉例:class Dog extends Animal { }

    • 繼承帶來的好處

    • 繼承可以讓類與類之間產生關系,子父類關系,產生子父類后,子類則可以使用父類中非私有的成員。

    我們為了讓大家更好的掌握其格式,現在給出一個簡單的案例加以說明:

    public class Fu {
    public void show() {
    System.out.println("show方法被調用");
    }
    }
    public class Zi extends Fu {
    public void method() {
    System.out.println("method方法被調用");
    }
    }
    public class Demo {
    public static void main(String[] args) {
    //創建對象,調用方法
    Fu f = new Fu();
    f.show();
    
    Zi z = new Zi();
    z.method();
    z.show();
    }
    }

    該案例執行的結果如下:

    Java中的繼承如何實現

    1.2 繼承的好處和弊端

    • 繼承好處

    • 提高了代碼的復用性(多個類相同的成員可以放到同一個類中)

    • 提高了代碼的維護性(如果方法的代碼需要修改,修改一處即可)

    • 繼承弊端

    • 繼承讓類與類之間產生了關系,類的耦合性增強了,當父類發生變化時子類實現也不得不跟著變化,削弱了子類的獨立性

    • 繼承的應用場景

    • 使用繼承,需要考慮類與類之間是否存在is..a的關系,不能盲目使用繼承

    • is..a的關系:誰是誰的一種,例如:老師和學生是人的一種,那人就是父類,學生和老師就是子類

    二. 繼承中的成員訪問特點

    2.1 繼承中變量的訪問特點

    在子類方法中訪問一個變量,采用的是就近原則

    • 子類局部范圍找

    • 子類成員范圍找

    • 父類成員范圍找

    • 如果都沒有就報錯(不考慮父親的父親…)

    我們還是以上面的案例加以說明:

    class Fu {
    int num = 10;
    }
    class Zi {
    int num = 20;
    public void show(){
    int num = 30;
    System.out.println(num);
    }
    }
    public class Demo1 {
    public static void main(String[] args) {
    Zi z = new Zi();
    z.show(); // 輸出show方法中的局部變量30
    }
    }

    具體該案例執行的結果如下:

    Java中的繼承如何實現

    2.2 super

    • thisVS.super關鍵字

    • this:代表本類對象的引用

    • super:代表父類存儲空間的標識(可以理解為父類對象引用)

    • this和super的使用:

    • 成員變量

    • this.成員變量 - 訪問本類成員變量

    • super.成員變量 - 訪問父類成員變量

    • 成員方法

    • this.成員方法 - 訪問本類成員方法

    • super.成員方法 - 訪問父類成員方法

    • 構造方法:

    • this(…) - 訪問本類構造方法

    • super(…) - 訪問父類構造方法

    2.3 繼承中構造方法的訪問特點

    注意:子類中所有的構造方法默認都會訪問父類中無參的構造方法

    子類會繼承父類中的數據,可能還會使用父類的數據。所以,子類初始化之前,一定要先完成父類數據的初始化,原因在于,每一個子類構造方法的第一條語句默認都是:super()

    問題:如果父類中沒有無參構造方法,只有帶參構造方法,該怎么辦呢?

    過使用super關鍵字去顯示的調用父類的帶參構造方法

    父類中自己提供一個無參構造方法

    推薦方案:

    自己給出無參構造方法

    2.4 繼承中成員方法的訪問特點

    通過子類對象訪問一個方法

    • 子類成員范圍找

    • 父類成員范圍找

    • 如果都沒有就報錯(不考慮父親的父親…)

    2.5 super內存圖

    • 對象在堆內存中,會單獨存在一塊super區域,用來存放父類的數據

    Java中的繼承如何實現

    2.6 方法重寫

    • 1、方法重寫概念

    • 子類出現了和父類中一模一樣的方法聲明(方法名一樣,參數列表也必須一樣)

    • 2、方法重寫的應用場景

    • 當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容

    • 3、Override注解

    • 用來檢測當前的方法,是否是重寫的方法,起到【校驗】的作用

    2.7 方法重寫的注意事項

    • 方法重寫的注意事項

    • 私有方法不能被重寫(父類私有成員子類是不能繼承的)

    • 子類方法訪問權限不能更低(public > 默認 > 私有)

    我們仍是通過前面的案例加以說明這個問題:

    public class Fu {
    private void show() {
    System.out.println("Fu中show()方法被調用");
    }
    
    void method() {
    System.out.println("Fu中method()方法被調用");
    }
    }
    
    public class Zi extends Fu {
    
    /* 編譯【出錯】,子類不能重寫父類私有的方法*/
    @Override
    private void show() {
    System.out.println("Zi中show()方法被調用");
    }
    
    /* 編譯【出錯】,子類重寫父類方法的時候,訪問權限需要大于等于父類 */
    @Override
    private void method() {
    System.out.println("Zi中method()方法被調用");
    }
    
    /* 編譯【通過】,子類重寫父類方法的時候,訪問權限需要大于等于父類 */
    @Override
    public void method() {
    System.out.println("Zi中method()方法被調用");
    }
    }

    Java中的繼承如何實現

    與我們給出的注釋是一致的;因此在我們日常的編程中一定要注意。

    2.8. Java中繼承的注意事項

    • Java中繼承的注意事項

    • Java中類只支持單繼承,不支持多繼承

    • 錯誤范例:class A extends B, C { }

    • Java中類支持多層繼承

    為了讓大家更好的理解該知識點,我們給出以下的代碼:

    public class Granddad {
    
    public void drink() {
    System.out.println("爺爺愛喝酒");
    }
    
    }
    
    public class Father extends Granddad {
    
    public void smoke() {
    System.out.println("爸爸愛抽煙");
    }
    
    }
    
    public class Mother {
    
    public void dance() {
    System.out.println("媽媽愛跳舞");
    }
    
    }
    public class Son extends Father {
    // 此時,Son類中就同時擁有drink方法以及smoke方法
    }

    三. 繼承練習

    • 需求:定義老師類和學生類,然后寫代碼測試;最后找到老師類和學生類當中的共性內容,抽取出一個父類,用繼承的方式改寫代碼,并進行測試

    • 根據其需求我們給出以下的思路:

               ①定義老師類(姓名,年齡,教書())

               ②定義學生類(姓名,年齡,學習())

               ③定義測試類,寫代碼測試

               ④共性抽取父類,定義人類(姓名,年齡)

               ⑤定義老師類,繼承人類,并給出自己特有方法:教書()

               ⑥定義學生類,繼承人類,并給出自己特有方法:學習()

               ⑦定義測試類,寫代碼測試

    我們通過以上的需求以及思路實現如下的代碼:

    package inheritExample;
    class Person {
    private String name;
    private int age;
    
    public Person() {
    }
    
    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }
    
    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;
    }
    }
    
    class Teacher extends Person {
    
    public Teacher() {}
    
    public Teacher(String name,int age) {
    super(name,age);
    }
    
    public void teach() {
    System.out.println("用心去撰寫每一篇博客");
    }
    
    }
    
    class Student extends Person{
    public Student() {}
    
    public Student(String name, int age) {
    super(name,age);
    }
    
    public void study(){
    System.out.println("讀者閱讀");
    }
    
    }
    
    class PersonDemo {
    public static void main(String[] args){
    //創建老師類對象并進行測試
    Teacher t = new Teacher();
    t.setName("一計之長");
    t.setAge(28);
    System.out.println(t.getName() + "," + t.getAge());
    t.teach();
    
    // 創建學生類對象測試
    Student s1 = new Student("readA",18);
    System.out.println(s1.getName() + "," + s1.getAge());
    s1.study();
    
    
    Student s2 = new Student("readB",23);
    System.out.println(s2.getName() + "," + s2.getAge());
    s2.study();
    }
    }

    具體執行的結果如下:

    Java中的繼承如何實現

    到此,相信大家對“Java中的繼承如何實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    肥东县| 铁岭市| 布尔津县| 武夷山市| 霍林郭勒市| 容城县| 林州市| 密云县| 大荔县| 辽阳市| 原阳县| 崇信县| 定襄县| 额济纳旗| 建德市| 利辛县| 封丘县| 樟树市| 泰兴市| 南召县| 巴林左旗| 灵石县| 囊谦县| 曲靖市| 靖西县| 邵阳县| 司法| 怀集县| 长治县| 天峨县| 红桥区| 大埔县| 尼玛县| 汾阳市| 龙海市| 荔波县| 西青区| 化德县| 德州市| 北票市| 涿鹿县|