java面向對象的特征二:繼承性 —(14)

1.為什么要有類的繼承性?(繼承性的好處)

  • ① 減少了代碼的冗余,提高了代碼的復用性
  • ② 便于功能的擴展
  • ③ 為之后多態性的使用,提供了前提
    圖示:
    在這里插入圖片描述

2.繼承性的格式:

class A extends B{}

  • A:子類、派生類、subclass
  • B:父類、超類、基類、superclass

3.子類繼承父類以后有哪些不同?

3.1體現:一旦子類A繼承父類B以后,子類A中就獲取了父類B中聲明的所有的屬性和方法。

  • 特別的,父類中聲明為private的屬性或方法,子類繼承父類以后,仍然認為獲取了父類中私的結構。只因為封裝性的影響,使得子類不能直接調用父類的結構而已。
    3.2 子類繼承父類以后,還可以聲明自己特有的屬性或方法:實現功能的拓展。
  • 子類和父類的關系,不同于子集和集合的關系。
  • extends:延展、擴展

4.Java中繼承性的說明

1.一個類可以被多個子類繼承。
2.Java中類的單繼承性:一個類只能有一個父類
3.子父類是相對的概念。
4.子類直接繼承的父類,稱為:直接父類。間接繼承的父類稱為:間接父類
5.子類繼承父類以后,就獲取了直接父類以及所間接父類中聲明的屬性和方法

圖示:
在這里插入圖片描述

5.java.lang.Object類的理解

  1. 如果我們沒顯式的聲明一個類的父類的話,則此類繼承于java.lang.Object類
  2. 所的java類(除java.lang.Object類之外都直接或間接的繼承于java.lang.Object類
  3. 意味著,所的java類具有java.lang.Object類聲明的功能。

1.什么是方法的重寫(override 或 overwrite)?

子類繼承父類以后,可以對父類中同名同參數的方法,進行覆蓋操作.

2. 應用:

重寫以后,當創建子類對象以后,通過子類對象調用子父類中的同名同參數的

方法時,實際執行的是子類重寫父類的方法。 3.舉例:

class Circle{
public double findArea(){}//求面積
}
class Cylinder extends Circle{
public double findArea(){}//求表面積
}


class Account{
public boolean withdraw(double amt){}
}
class CheckAccount extends Account{
public boolean withdraw(double amt){}
}

4.重寫的規則:

方法的聲明: 權限修飾符  返回值類型  方法名(形參列表) throws 異常的類型{
  •  				//方法體
    
  •  			}
    
  •  約定俗稱:子類中的叫重寫的方法,父類中的叫被重寫的方法
    
  •  ① 子類重寫的方法的方法名和形參列表與父類被重寫的方法的方法名和形參列表相同
    
  •     ② 子類重寫的方法的權限修飾符不小于父類被重寫的方法的權限修飾符
    
  •  	>特殊情況:子類不能重寫父類中聲明為private權限的方法
    
  •     ③ 返回值類型:
    
  •  	>父類被重寫的方法的返回值類型是void,則子類重寫的方法的返回值類型只能是void
    
  •  	>父類被重寫的方法的返回值類型是A類型,則子類重寫的方法的返回值類型可以是A類或A類的子類
    
  •  	>父類被重寫的方法的返回值類型是基本數據類型(比如:double),則子類重寫的方法的返回值類型必須是相同的基本數據類型(必須也是double)
    
  •  ④ 子類重寫的方法拋出的異常類型不大于父類被重寫的方法拋出的異常類型(具體放到異常處理時候講)
    

  • 子類和父類中的同名同參數的方法要么都聲明為非static的(考慮重寫,要么都聲明為static的(不是重寫)。

5.面試題:

區分方法的重寫和重載?
答:
① 二者的概念:
② 重載和重寫的具體規則
③ 重載:不表現為多態性。
重寫:表現為多態性。
重載,是指允許存在多個同名方法,而這些方法的參數不同。編譯器根據方法不同的參數表,對同名方法的名稱做修飾。對于編譯器而言,這些同名方法就成了不同的方法。它們的調用地址在編譯期就綁定了。Java的重載是可以包括父類和子類的,即子類可以重載父類的同名不同參數的方法。
所以:對于重載而言,在方法調用之前,編譯器就已經確定了所要調用的方法,這稱為“早綁定”或“靜態綁定”;

而對于多態,只等到方法調用的那一刻,解釋運行器才會確定所要調用的具體方法,這稱為“晚綁定”或“動態綁定”。

引用一句Bruce Eckel的話:“不要犯傻,如果它不是晚綁定,它就不是多態。”

1.super 關鍵字可以理解為:父類的

2.可以用來調用的結構:

屬性、方法、構造器

3.super調用屬性、方法:

3.1 我們可以在子類的方法或構造器中。通過使用"super.屬性"或"super.方法"的方式,顯式的調用父類中聲明的屬性或方法。但是,通常情況下,我們習慣省略"super."
3.2 特殊情況:當子類和父類中定義了同名的屬性時,我們要想在子類中調用父類中聲明的屬性,則必須顯式的使用"super.屬性"的方式,表明調用的是父類中聲明的屬性。
3.3 特殊情況:當子類重寫了父類中的方法以后,我們想在子類的方法中調用父類中被重寫的方法時,則必須顯式的使用"super.方法"的方式,表明調用的是父類中被重寫的方法。

4.super調用構造器:

4.1 我們可以在子類的構造器中顯式的使用"super(形參列表)"的方式,調用父類中聲明的指定的構造器
4.2 "super(形參列表)"的使用,必須聲明在子類構造器的首行!
4.3 我們在類的構造器中,針對于"this(形參列表)"或"super(形參列表)“只能二一,不能同時出現
4.4 在構造器的首行,沒顯式的聲明"this(形參列表)“或"super(形參列表)”,則默認調用的是父類中空參的構造器:super()
4.5 在類的多個構造器中,至少一個類的構造器中使用了"super(形參列表)”,調用父類中的構造器

1.從結果上看:繼承性

子類繼承父類以后,就獲取了父類中聲明的屬性或方法。
創建子類的對象,在堆空間中,就會加載所父類中聲明的屬性。

2.從過程上看:

當我們通過子類的構造器創建子類對象時,我們一定會直接或間接的調用其父類的構造器,進而調用父類的父類的構造器,…直到調用了java.lang.Object類中空參的構造器為止。正因為加載過所的父類的結構,所以才可以看到內存中父類中的結構,子類對象才可以考慮進行調用。

圖示:
在這里插入圖片描述

3.強調說明:

雖然創建子類對象時,調用了父類的構造器,但是自始至終就創建過一個對象,即為new的子類對象。

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

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

相關文章

vuejs怎么在服務器上發布部署

首先VUE 是一個javascript的前端框架,注定了它是運行在瀏覽器里的,對服務器本地沒有任何要求,只要一個靜態文件服務器能通過http訪問到其資源文件就足矣!無論你是用apache ,ngnix 就算你要用node 自己實現一個靜態文件服務器&…

C#入門詳解(14)

接口,依賴反轉,單元測試 接口是協約是規定,所以必須是公開的,只能是public; static void Main(string[] args){int[] num1 new int[] { 1, 2, 3, 4, 5 };Console.WriteLine(Sum(num1).ToString());Console.WriteLine(""…

SpringBoot操作MongoDB實現增刪改查

本篇博客主講如何使用SpringBoot操作MongoDB。 SpringBoot操作MongoDB實現增刪改查 &#xff08;1&#xff09;pom.xml引入依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifac…

java面向對象的特征三:多態性 —(15)

1.多態性的理解&#xff1a;可以理解為一個事物的多種形態。 2.何為多態性&#xff1a; 對象的多態性&#xff1a;父類的引用指向子類的對象&#xff08;或子類的對象賦給父類的引用&#xff09; 舉例&#xff1a; Person p new Man(); Object obj new Date(); 3.多態性的…

vue 中$index $key 已移除

之前可以這樣: 123456<ulid"example"><liv-for"item in items">{{$index}}{{$key}}</li></ul>現在已經移除,如果還用的話就會報錯:Uncaught ReferenceError: $index is not defined; 現在這樣寫: 123456<ul id"example&qu…

vue-resource全攻略

Vue.js——vue-resource全攻略 概述 上一篇我們介紹了如何將$.ajax和Vue.js結合在一起使用&#xff0c;并實現了一個簡單的跨域CURD示例。Vue.js是數據驅動的&#xff0c;這使得我們并不需要直接操作DOM&#xff0c;如果我們不需要使用jQuery的DOM選擇器&#xff0c;就沒有必要…

java面向對象:關鍵字 —(16)

static:靜態的 1.可以用來修飾的結構&#xff1a;主要用來修飾類的內部結構 屬性、方法、代碼塊、內部類 2.static修飾屬性&#xff1a;靜態變量&#xff08;或類變量&#xff09; 2.1 屬性&#xff0c;是否使用static修飾&#xff0c;又分為&#xff1a;靜態屬性 vs 非靜態…

《少年先瘋隊》第九次團隊作業:Beta沖刺與團隊項目驗收

博文簡要信息表&#xff1a; 項目內容軟件工程https://www.cnblogs.com/nwnu-daizh/本次實驗鏈接地址https://www.cnblogs.com/nwnu-daizh/p/11056511.html團隊名稱少年先瘋隊作業學習目標&#xff08;1&#xff09;掌握軟件黑盒測試技術&#xff1b;&#xff08;2&#xff09;…

vue-resource jsonp跨域問題解決方法

最近在學習vue.js 碰到個ajax跨域請求的問題&#xff0c;之前知道可以用jsonp解決&#xff0c;但是一直沒實踐過&#xff0c;這次用發現里面好多問題&#xff0c;所以現在記錄下來&#xff0c;希望可以給剛接觸使用jsonp的同學一點幫助&#xff01; 關于什么是jsonp&#xff0c…

虛擬機無法連接至網絡

問題&#xff1a; 虛擬機中的win XP系統無法連接至外部win10系統網絡 嘗試解決方法&#xff1a; 1&#xff09;換用橋接模式和NAT模式&#xff0c;無效 2&#xff09;恢復虛擬機網絡屬性至默認狀態&#xff0c;無效 最終解決方法&#xff1a; 換用外部無線網絡&#xff0c;即能…

java面向對象:關鍵字 —(17)

interface:接口 1.使用說明&#xff1a; 1.接口使用interface來定義 2.Java中&#xff0c;接口和類是并列的兩個結構3.如何定義接口&#xff1a;定義接口中的成員 3.1 JDK7及以前&#xff1a;只能定義全局常量和抽象方法>全局常量&#xff1a;public static final的.但是…

原生js來實現對dom元素class的操作方法

jQuery操作class的方式非常強大 寫了一個利用原生js來實現對dom元素class的操作方法 1.addClass:為指定的dom元素添加樣式 2.removeClass:刪除指定dom元素的樣式 3.toggleClass:如果存在(不存在)&#xff0c;就刪除(添加)一個樣式 4.hasClass:判斷樣式是否存在 下面為一toggleC…

python+selenium配置Edge瀏覽器

Chrome, Firefox只需要修改conftest.py文件中的 pytest.fixture(scopesession)def browser(): return BzwUtil.read_yml(config.yml,WEB_INFO,BROWSER) add option in pytest command line def pytest_addoption(parser): parser.addoption("--browser", actio…

JSON.parse和JSON.stringify方法

JSON.parse() JSON.parse()方法將json字符串轉化為Javascript值或對象。 語法 JSON.parse(text[,reviver]) 參數 text:要被解析成Javascript值的字符串 reviver:若是一個函數則規定了原始值(text)如何被解析改造&#xff0c;在被返回前。 示例 JSON.parse({}); //…

java面向對象:異常處理 —(18)

1. 異常的體系結構 java.lang.Throwable |-----java.lang.Error:一般不編寫針對性的代碼進行處理。|-----java.lang.Exception:可以進行異常的處理|------編譯時異常(checked)|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|------運行時異常(un…

vue請求簡單配置

簡單記錄一下vue的http請求配置相關 測試環境請求接口設置:   1. config/dev.env.js添加&#xff1a;     module.exports merge(prodEnv, {       NODE_ENV: "development",       API_ROOT: "http://", //配置http請求頭     })…

【vue報錯】——listen EADDRINUSE :::8080 解決方案

問題原因&#xff1a; 此項錯誤表示 8080 端口被占用 解決方案一&#xff1a; 打開cmd 輸入&#xff1a;netstat -ano 查看所有端口信息&#xff0c;如圖&#xff0c;找到端口 8081&#xff0c;以及對應的 PID 輸入&#xff1a;tskill PID 即可殺死進程 解決方案二&#xff1a…

記錄_20190626

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result異常的解決方法 原來JAVA中如果用BigDecimal做除法的時候一定要在divide方法中傳遞第二個參數&#xff0c;定義精確到小數點后幾位&#xff0c;否則在不整除的情況下…

String與Array

public class Api {Testpublic void StringApi(){// equals() 判斷內容是否相同區分大小寫// equalsIgnoreCase() 判斷內容是否相同不區分大小寫// length() 獲取長度// charAt(int index) 獲取某個索引位置的字…

HTML與CSS布局技巧總結

很多人對CSS的布局有困惑&#xff0c;實際的應用場景中由于布局種類多難以選擇。今天我花些時間總結下自己對CSS布局的理解&#xff0c;分析下了解各種布局的優劣&#xff0c;同時希望能分享給初入前端的朋友們一些在布局上的經驗&#xff0c;如果有那些地方總結的不好&#xf…