【java程序設計期末復習】chapter5 子類的繼承

子類的繼承

繼承是一種由已有的類創建新類的機制。利用繼承,我們可以先創建一個共有屬性的一般類,根據該一般類再創建具有特殊屬性的新類,新類繼承一般類的狀態和行為,并根據需要增加它自己的新的狀態和行為。由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。

Java不支持多重繼承(子類只能有一個父類)。

使用關鍵字extends來定義一個類的子類,格式如下:

  class Student extends People{}

說明:把Student類定義為People類的子類、People類是Student類的父類

子類的繼承性

類可以有兩種重要的成員:成員變量和方法。子類的成員中有一部分是子類自己聲明定義的,另一部分是從它的父類繼承的。

所謂子類繼承父類的成員變量就是把繼承來的變量作為自己的一個成員變量,就好象它們是在子類中直接聲明一樣,可以被子類中自己定義的任何實例方法操作。

所謂子類繼承父類的方法就是把繼承來的方法作為子類中的一個方法,就好象它們是在子類中直接定義了一樣,可以被子類中自己定義的任何實例方法調用。

class Father 
{  float weight,height;String head;void speak(String s){  System.out.println(s);}
}
class Son extends Father 
{   String hand,foot;
}Son s=new Son();

如果子類和父類在同一個包中,那么,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法,繼承的成員變量或方法的訪問權限保持不變。

public class People { int age,leg = 2,hand = 2;public void showPeopleMess() {System.out.printf("%d歲,%d只腳,%d只手\t",age,leg,hand);}    
}
public class Student extends People {int number;void tellMessage() {showPeopleMess();}
} 
class People {private int averHeight = 166;public int getAverHeight() {return averHeight;}
}
class ChinaPeople extends People {int height;public void setHeight(int h) {//height = h+averHeiht; // 非法,子類沒有繼承averHeihtheight = h;}public int getHeight() {return height;}
}
public class Example5_2 {
public static void main(String args[]) {ChinaPeople zhangSan = new ChinaPeople();System.out.println("子類對象未繼承的averageHeight的值是:"+zhangSan.getAverHeight());zhangSan.setHeight(178);System.out.println("子類對象的實例變量height的值是:"+zhangSan.getHeight());
}  
}

子類使用super訪問被隱藏的方法

子類可以隱藏從父類繼承的成員變量和方法,如果在子類中想使用被子類隱藏的成員變量或方法就可以使用關鍵字super。比如super.x、super.play()就是訪問和調用被子類隱藏的成員變量x和方法play().

class Sum { int n;float f() { float sum=0;for(int i=1;i<=n;i++)sum=sum+i;return sum;  }
}
class Average extends Sum {int n;  float f() { float c;super.n=n;c=super.f();//f由于子類方法同名,被覆蓋了,用super訪問被隱藏的函數和方法return c/n; }float g() {float c;c=super.f();return c/2; }
}
public class Example5_7 {public static void main(String args[]) {Average aver=new Average();aver.n=100;float resultOne=aver.f();float resultTwo=aver.g(); System.out.println("resultOne="+resultOne);System.out.println("resultTwo="+resultTwo);}
}

final關鍵字

final關鍵字可以修飾類、成員變量和方法中的局部變量。
可以使用final將類聲明為final類。final類不能被繼承,即不能有子類。

final class A 
{… …
} 

如果用final修飾父類中的一個方法,那么這個方法不允許子類重寫。
如果成員變量或局部變量被修飾為final的,就是常量。

abstract類和abstract()方法

用關鍵字abstract修飾的類稱為abstract類(抽象類)。

abstract class A 
{… …
}

用關鍵字abstract修飾的方法稱為abstract方法(抽象方法)

abstract int min(int x,int y); 

abstract類有如下特點

(1)和普通的類相比,abstract類里可以有abstract方法。也可以沒有。
(2)對于abstract方法,只允許聲明,不允許實現,而且不允許使用final修飾abstract方法。
(3)對于abstract類,不能使用new運算符創建該類的對象,只能產生其子類,由子類創建對象。
(4)如果一個類是abstract類的子類,它必須具體實現父類的所有的abstract方法。
abstract class GirlFriend {abstract void speak();abstract void cooking();
}
//使用了abstract類封裝了男孩對女朋友的行為要求
//即封裝了他要找的任何具體女朋友都應該具有的行為class ChinaGirlFriend extends GirlFriend {void speak(){System.out.println("你好");}void cooking(){System.out.println("水煮魚"); }
}
class AmericanGirlFriend extends GirlFriend {void speak(){System.out.println("hello");}void cooking(){System.out.println("roast beef"); }
}
class Boy {GirlFriend friend;void setGirlfriend(GirlFriend f){friend = f;}void showGirlFriend() {friend.speak();friend.cooking();}
}
public class Example5_12 {public static void main(String args[]) {GirlFriend girl = new ChinaGirlFriend(); //girl是上轉型對象Boy boy = new Boy();boy.setGirlfriend(girl);boy.showGirlFriend();     girl = new AmericanGirlFriend(); //girl是上轉型對象boy.setGirlfriend(girl);boy.showGirlFriend();      }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16234.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git分支的操作詳解(查看、新增、切換、合并、刪除)

天行健&#xff0c;君子以自強不息&#xff1b;地勢坤&#xff0c;君子以厚德載物。 每個人都有惰性&#xff0c;但不斷學習是好好生活的根本&#xff0c;共勉&#xff01; 文章均為學習整理筆記&#xff0c;分享記錄為主&#xff0c;如有錯誤請指正&#xff0c;共同學習進步。…

2024最新前端面試八股文【基礎篇293題】

?、HTML、HTTP、web綜合問題 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么區別 3 HTTP的?種請求?法?途 4 從瀏覽器地址欄輸?url到顯示??的步驟 5 如何進??站性能優化 6 HTTP狀態碼及其含義 7 語義化的理解 8 介紹?下你對瀏覽器內核的理解 9 …

【操作系統】發展與分類(手工操作、批處理、分時操作、實時操作)

2.操作系統發展與分類 思維導圖 手工操作階段&#xff08;此階段無操作系統&#xff09; 需要人工干預 缺點&#xff1a; 1.用戶獨占全機&#xff0c;資源利用率低&#xff1b; 2.CPU等待手工操作&#xff0c;CPU利用不充分。 批處理階段&#xff08;操作系統開始出現&#x…

鏈表-線性表的鏈式表示

鏈表-線性表的鏈式表示 #mermaid-svg-ozpXrKnNCyYdqHvN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ozpXrKnNCyYdqHvN .error-icon{fill:#552222;}#mermaid-svg-ozpXrKnNCyYdqHvN .error-text{fill:#552222;stro…

express 設定路徑別名

在使用ts情況下 pnpm i -D tsconfig-paths配置tsconfig.json {// 引入 tsconfig-paths/register// 注意 ts-node 的層級與 compilerOptions 相同"ts-node": {"require": ["tsconfig-paths/register"]},"compilerOptions": {// ...//…

width: auto 和 width: 100% 的區別

width: auto Vs. width: 100% 關于 width 屬性 CSS 中的 width 屬性用于設置元素的寬度。默認情況下&#xff0c;width 設置的是內容區&#xff08;content area&#xff09;的寬度。如果元素有樣式 box-sizing: border-box&#xff0c;則 width 設置的是邊框區&#xff08;bo…

正運動控制器:視覺糾偏和找孔

一、用戶主界面CCD參數設置 通過主界面CCD參數設置&#xff0c;學習如何操作計算相機中心與電批中心的偏移量&#xff0c;以及相機標定的功能。 1、相機中心與電批中心的偏移量計算 1.1、在用戶主界面點擊CCD參數按鈕&#xff0c;進入CCD設置界面。 主界面 CCD參數設置界面 1…

制作電子畫冊速成攻略,快來試試

?當今社會&#xff0c;數字媒體日益普及&#xff0c;電子畫冊作為一種嶄新的展示方式&#xff0c;受到了越來越多人的青睞。它不僅形式新穎&#xff0c;互動性強&#xff0c;而且制作起來也并不復雜。想知道如何快速掌握制作電子畫冊的技巧嗎&#xff1f;我來教你吧。 接下來&…

二叉樹的廣義表反序列化

前言 個人小記 一、代碼 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_NODE 10 #define MAX_LEN 100 #define key(n)(n)?(n->key):(-1) typedef struct Node {int key;struct Node* lchild,*rchil…

Leetcode 3159. Find Occurrences of an Element in an Array

Leetcode 3159. Find Occurrences of an Element in an Array 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3159. Find Occurrences of an Element in an Array 1. 解題思路 這一題的話我們只需要首先統計一下array當中目標元素x出現在第幾次的位置&#xff0c;構造一個has…

推薦13款常用的Vscode插件,提高前端日常開發效率

1. Live Server Live Server 插件是一個用于前端開發的擴展&#xff0c;它的主要作用是提供一個本地開發服務器&#xff0c;以便實時預覽和調試網頁應用程序。其最大特點在于熱重載&#xff0c;即開發者可實時預覽代碼效果。 因為Live Server 允許開發者在瀏覽器中實時預覽您正…

軟件測試面試題(五)

一&#xff1a;如何選擇用戶測試的工作產品&#xff1f;、 答&#xff1a;在用戶有需求得到簽字確認以后&#xff0c;我們選擇用戶測試的工作產品。我們幾乎所有的項目都進行了測試&#xff0c;我們是在項目立項公告中得知需要對工作產品進行測試。 二&#xff1a;測試環境描述…

C++中集合的使用

在 C 中&#xff0c;集合通常指的是標準模板庫&#xff08;STL&#xff09;中的 std::set 或 std::unordered_set。這兩個都是用來存儲不重復元素的容器&#xff0c;但在實現和使用方式上有一些區別。 1. std::set&#xff1a; 基于紅黑樹實現&#xff0c;元素按照嚴格的順序…

Llama 3沒能逼出GPT-5!OpenAI怒“卷”To B戰場,新企業級 AI 功能重磅推出!

Meta 是本周當之無愧的AI巨星&#xff01;剛剛推出的 Llama 3 憑借著強大的性能和開源生態的優勢在 LLM 排行榜上迅速躍升。 按理說&#xff0c;Llama 3在開源的狀態下做到了 GPT-3.7 的水平&#xff0c;必然會顯得用戶&#xff08;尤其是企業用戶&#xff0c;他們更具備獨立部…

指令中常用的7種尋址方式z

指令中的尋址方式就是對指令中的地址字段進行解釋&#xff0c;以獲得操作數的方法或獲得程序轉移地址的方法。常用的尋址方式有&#xff1a; 立即尋址&#xff1a;操作數就包含在指令中。直接尋址&#xff1a;操作數存放在內存單元中&#xff0c;指令中直接給出操作數所在存儲…

C#調用HttpClient.SendAsync報錯:System.Net.Http.HttpRequestException: 發送請求時出錯。

C#調用HttpClient.SendAsync報錯&#xff1a;System.Net.Http.HttpRequestException: 發送請求時出錯。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);問題出在SSL/TLS&#xff0c;Windows Server 2012不支持…

先進制造aps專題八 基于ai大模型的ai超級應用,ai生管

目前正在研發的面向消費者的ai超級應用有ai文員&#xff0c;ai教師&#xff0c;ai家教&#xff0c;ai護士&#xff0c;ai翻譯 而ai生管無疑是面向制造業的ai超級應用 從商業角度來說&#xff0c;ai生管&#xff0c;必然是aps公司必然要研發的ai超級應用

Grafana 路徑遍歷所有路徑 CVE-2021-43798漏洞預警

簡介? ?Grafana是一個跨平臺、開源的數據可視化網絡應用程序平臺。用戶配置連接的數據源之后&#xff0c;Grafana可以在網絡瀏覽器里顯示數據圖表和警告。 漏洞危害等級 高危 CVE 編號? CVE-2021-43798 FOFA查詢 ?app"Grafana" ?zoomeyes查詢 ?app:"gr…

Vue3解決“找不到模塊“@/components/xxx.vue”或其相應的類型聲明”

文章目錄 前言背景問題描述解決方案總結 前言 在使用 Vue 3 開發項目時&#xff0c;遇到“找不到模塊 ‘/components/xxx.vue’ 或其相應的類型聲明”的錯誤是一個常見問題。這通常與 TypeScript 和模塊解析相關的配置不當有關。本文將詳細介紹如何解決此問題&#xff0c;確保…