Java 繼承

来源:https://www.cnblogs.com/lsy131479/archive/2018/02/11/8439995.html
-Advertisement-
Play Games

繼承使用繼承優化設計使用:將重覆的代碼抽取到父類中繼承的優點和實現優點:方便修改代碼減少代碼量 子類和父類關係是is-a的關係(可以有多個子類,但只能有一個父類) 如何使用繼承?class Pet {/公共的屬性和方法}class Dog extends Pet {/子類特有的屬性和方法}class ...


繼承
使用繼承優化設計
使用:
將重覆的代碼抽取到父類中
繼承的優點和實現
優點:
方便修改代碼
減少代碼量

子類和父類關係是is-a的關係(可以有多個子類,但只能有一個父類)

如何使用繼承?
class Pet {
/公共的屬性和方法
}
class Dog extends Pet {
/子類特有的屬性和方法
}
class Penguin extends Pet {
}
//extends:繼承關鍵字
//一個子類只能繼承一個父類


理解繼承
子類訪問父類成員使用super關鍵字,訪問父類構造方法。super代表父類對象
super();調用父類無參構造方法
super(name);調用父類無有參構造方法
在子類構造方法中調用且必須是第一句訪問父類屬性
super.name;
訪問父類方法
super.print();

 

繼承下構造方法的執行過程

可以用構造方法為屬性賦值

當我們實例化子類無參構造時父類沒有自定義構造 系統會自動分配一個無參構造

實例化子類對象預設會先執行父類的構造,在執行子類的構造

super();預設調用父類的無參數構造
註意細節:必須是子類中在構造方法的第一條語句

(無參構造會預設調用)

super(參數列表);調用父類中的有參構造
使用super(參數列表);重覆調用父類中的有參構造,預設直接調用父類中的有參數構造,而不會調用父類中的無參數構造


註意:
實例化子類對象時,子類相應的構造,第一行調用父類的哪個構造,就執行哪一個父類構造,,如果沒有聲明父類構造,預設皆父類的無參構造

 


子類可以繼承父類的哪些資源?

private 不可被繼承
子類與父類不在同包,使用預設訪問許可權的成員不可被繼承(預設 友好的 friendly)
構造方法不被繼承必須使用super進行訪問

 


論訪問修飾符 protected (受保護的):
可以修飾屬性和方法
本類,同包,子類可以訪問(子類跨包也可以訪問)


多重繼承關係的初始化順序?
父類屬性>父類構造方法>子類屬性>子類構造方法

何時使用繼承?
 繼承與真實世界類似
 繼承最大的特點是:代碼重用(的一種方式)
 將子類共有的屬性和方法都放在父類當中

 

構造方法不能被繼承,因此不能重寫

方法重寫的規則:
 方法名相同
 參數列表相同
 返回值類型相同或者是其子類
 訪問許可權不能嚴於子類


方法重載與方法重寫:

方法重寫:位置在子類,方法名相同,參數表相同,返回值相同或是其子類i,訪問修飾符不能比父類更嚴格
方法重載:位置在同類,方法名相同,返回值無關,訪問修飾符無關


super關鍵字來訪問父類的成員
 super只能出現在子類方法和構造方法中
 super調用構造方法時,只能是第一句
 super不能訪問父類的private成員

 

 

 

 

 廢話不多說,上慄子:

package cn.jbit.epet.inherit2;

/**
 * 狗狗類,寵物的子類。
 * @author 北大青鳥
 */
public class Dog extends Pet {
    private String strain;// 品種

    /**
     * 有參構造方法。
     * @param name   昵稱
     * @param strain   品種
     */
    public Dog(String name, String strain) {
        super(name); //此處不能使用this.name=name;
        this.strain = strain;
    }
    
    public void setStrain(String strain) {
        this.strain = strain;
    }
    public String getStrain() {
        return strain;
    }
    
    public void print(){
        super.print();
        System.out.println("我是一隻"+this.getStrain()+"犬。");
    }
}
狗狗類
package cn.jbit.epet.inherit2;
/**
 * 企鵝類,寵物的子類。
 * @author 北大青鳥 
 */
public class Penguin extends Pet {
    private String sex;// 性別
    /**
     * 有參構造方法。
     * @param name 昵稱
     * @param sex 性別
     */
    public Penguin(String name, String sex) {
        super(name);
        this.sex = sex;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }    
    
    public void print(){
        super.print();
        System.out.println("我的性別是"+this.getSex()+"。");
    }
}
企鵝類
package cn.jbit.epet.inherit2;

/**
 * 寵物類,狗狗和企鵝的父類。
 * @author 北大青鳥
 */
public class Pet {
    private String name = "無名氏";// 昵稱
    private int health = 100;// 健康值
    private int love = 0;// 親密度
    /**
     * 無參構造方法。
     */
    public Pet() {
        this.health = 95;
        System.out.println("執行寵物的無參構造方法。");
    }
    /**
     * 有參構造方法。
     * @param name  昵稱
     */
    public Pet(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public int getHealth() {
        return health;
    }
    public int getLove() {
        return love;
    }
    /**
     * 輸出寵物信息。
     */
    public void print() {
        System.out.println("寵物的自白:\n我的名字叫" + 
                this.name + ",我的健康值是" + this.health 
                + ",我和主人的親密程度是" + this.love + "。");
    }
}
父類
package cn.jbit.epet.inherit2;

/**
 * 測試類,測試類的繼承。
 * @author 北大青鳥
 */
public class Test {
    public static void main(String[] args) {
        // 1、創建寵物對象pet並輸出信息
        Pet pet = new Pet("貝貝");
        //pet.print();
        // 2、創建狗狗對象dog並輸出信息
        Dog dog = new Dog("歐歐", "雪娜瑞");
        dog.print();
        // 3、創建企鵝對象pgn並輸出信息
        Penguin pgn = new Penguin("楠楠", "Q妹");
        pgn.print();
    }
}
測試類

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們不生產內容,我們只是互聯網的內容搬運工,這是大部分不具備原創能力個人站長的心聲。雖然原創能力不夠,但是服務目標用戶群體依然要清晰、細化和長尾,做的內容對用戶是有用的,而非垃圾。 ...
  • `Lighthouse 頁面性能 PWA 可訪問性(無障礙) 最佳實踐 SEO`。Lighthouse會對各個測試項的結果打分,並給出優化建議,這些打分標準和優化建議可以視為Google的網頁最佳實踐。 使用入門 運行Lighthouse的方式有三種:在開發者工具(Devtools)的Audits, ...
  • // 對Date的擴展,將 Date 轉化為指定格式的String// 月(M)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 可以用 1-2 個占位符, // 年(y)可以用 1-4 個占位符,毫秒(S)只能用 1 個占位符(是 1-3 位的數字) // 例子: // (new Date( ...
  • 自己最近研發了一套新的htmlcss教程,併進行了授課實施,視頻教程百度雲下載鏈接如下: "視頻及案例源碼下載地址" 本套教程視頻需要安裝屏幕錄像專家軟體才能觀看,屏幕錄像專家下載地址如下: "屏幕錄像專家" 本套教程的目標為讓具備初中以上學歷的任何人都可以在短時間內(20個小時)入門網頁製作。 本 ...
  • 背景:最近做了一個網站,傳單伺服器之後,每次打開都是亂碼,不對啊,我在本地測得明明是排版很整齊啊,然後發現,360用的是“相容模式”打開的,這就尷尬了,用戶一打開就是亂碼,這用戶體驗得有多差!用戶可不管你是什麼模式。我研究了一番,終於找到解決辦法。 國內的主流瀏覽器基本都是雙核瀏覽器:基於Webki ...
  • 承接上篇文章: "小白學Docker之Compose" ,自學網站來源於 "https://docs.docker.com/get started" 系列文章: "小白學Docker之基礎篇" "小白學Docker之Compose" "小白學Docker之Swarm" 概念 Docker Swarm ...
  • 進入到第六章了,我們要開始聊聊分散式系統之中的核心問題: 數據分區 。分散式系統通常是通過大規模的數據節點來處理單機沒有辦法處理的海量數據集,因此,可以將一個大型數據集可以分佈在多個磁碟上,查詢負載可以分佈在多個處理器上。在這一章中,我們首先討論劃分大型數據集的不同方法,並觀察數據索引如何與分區交互 ...
  • Chip Factory Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 4414 Accepted Submission(s): 1954 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...