java 繼承重寫注意
繼承要記住滿足裡式替換原則(LSP)
LSP: 子類能夠出現的地方, 父類一定可以替換出現, 並且不影響程式的執行, 外界無法判斷是使用了父類還是子類
但是! 子類出現的地方, 父類不一定可以替換
如何遵守LSP
子類可以有自己的特性
子類可以相對於父類有自己的特殊性, 但不應該講父類的方法修改得面目全非
比如說:(具體程式碼參考https://blog.csdn.net/BeyondHaven/article/details/6826013)
父類是矩形 , 擁有設定長寬的方法, 子類是正方形, 只能設定邊長 , 所以這違背了LSP
子類必須完全實現父類的方法
覆蓋或實現父類的方法時輸入引數的約束可以被放大, 不可以被縮小
如果約束縮小 , 父類替換出現時會出現取值在子類約束之外 但在父類約束之內的情況
覆蓋或實現父類的方法時輸出結果可以被縮小, 不可以放大
繼承的風險
- 繼承是入侵性的(只要繼承,就必須擁有父類的所有屬性與方法);
- 降低了程式碼的靈活性(子類擁有了父類的屬性方法,會增多約束);
- 增強了耦合性(當父類的常量、變數、方法被修改時,必需要考慮子類的修改)。
參考連結
相關推薦
java 繼承重寫注意
繼承要記住滿足裡式替換原則(LSP) LSP: 子類能夠出現的地方, 父類一定可以替換出現, 並且不影響程式的執行, 外界無法判斷是使用了父類還是子類 但是! 子類出現的地方, 父類不一定可以替換 如何遵守LSP 子類可以有自己的特性 子類可以相對於父類有自
Java 繼承與重寫、重載
重載 進行 cnblogs 向上造型 用法 編譯 根據 ide 調用 1.類的繼承 1)繼承 父類:所有子類所共有的屬性和行為 子類:子類所特有的屬性和行為 通過extends關鍵字來實現類的繼承 子類(Sub class)可以繼承父類(Super class)的
Java繼承特性以及重寫現象的記憶體分析
今天我們說一下Java面向物件中的一個特性-繼承,然後做一下他的記憶體分析,理解一下重新現象的情況。 怎麼理解繼承? 下面先介紹一下怎麼理解繼承的特性,繼承呢在Java中的關鍵是extends,那麼其實所謂的繼承是比較簡單的也是很好理解的,Java中如果一個類繼承了父類,
#java 一個簡單的例子理解java繼承、成員函式重寫、型別轉換
一個簡單的例子理解java繼承、成員函式重寫、型別轉換 1、繼承簡介 舉一個簡單的例子:筆分為很多種,比如毛筆、鋼筆、圓珠筆等等,這些筆都有一些相同的屬性比如長度、筆跡的粗細等等;但他們也有不同的特點,比如他們的用途(毛筆可以寫對聯、鋼筆可以寫作業等等)等。這時
Java中重寫Object類的equals方法和Hashcode方法的注意事項
在重寫任何類的equals方法是必須遵循以下幾點: 1、對稱性:如果x.equals(y)返回是“true”,那麼y.equals(x)也應該返回是“true”。 2、反射性:x.equals(x)必須返回是“true”。 3、類推性:如果x.equals(y)返回是“tr
Java-繼承之定義格式及注意事項
繼承 繼承定義 多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。 就比說動物,狗是動物,貓是動物,大熊貓也是動物,他們都有名字,都有年齡,愛好等等,即就是,動物的屬性和行為
3 java 繼承與編譯情況 | 方法重寫 | 通過反射改變private變數值
public class Test{ public static void main(String[] arge) throws Exception{ Parent p = new Child(); p.output(); } } class Parent
java 繼承中的重寫父類方法
重寫父類方法 子類擴充套件(extends)了父類,子類是一種特殊的父類。子類可以獲得父類所有的屬性和方法,達到程式碼複用的目的。子類總以父類為基礎增加新的屬性和方法。但是有時候我們還需要重寫(覆蓋)父類的方法。 子類覆蓋父類的方法遵循的是“兩同兩小一大”原
Java中靜態屬性、靜態方法繼承重寫的那點破事
public class A { public static String staticStr = "A's static field"; public String nonStaticStr = "A's nonstatic field"
Java 繼承 函式 重寫後的呼叫關係
當class B 繼承class A ,並重寫A中的 C,D 方法,其中C方法呼叫了D方法,當B中的C方法呼叫父類的C方法時,父類的C方法會呼叫子類的D方法 附程式碼 public class ExtendsParentTest extends ClassA{ pub
java 繼承、重載、重寫與多態
如果 訪問修飾符 span exce eat 類型 使用方法 進行 擴展 首先是java 繼承、重載和重寫的概念 繼承: 繼承的作用在於代碼的復用。由於繼承意味著父類的所有方法亦可在子類中使用,所以發給父類的消息亦可發給衍生類。如果Person類中有一個ea
JAVA中重寫equals()方法的同時要重寫hashcode()方法
內存地址 his mov bool args 變量 維護 log obj object對象中的 public boolean equals(Object obj),對於任何非空引用值 x 和 y,當且僅當 x 和 y 引用同一個對象時,此方法才返回 true;註意:當此方法
Java-繼承基本知識
sys eth stat main father static pri ble sta 繼承: 繼承是指一個類的定義可以基於現有已存在的類,即子類基於父類,父類的屬性和行為可以被子類引用,並且可以擴展功能。 繼承的聲明:【訪問權限修飾符】【修飾符】子類名字 extends
java的重寫
-name 改變 stat 聲明 body www header tor size 如果子類中具有與父類中聲明相同的方法,在java中稱為方法覆蓋。換句話說,如果子類提供了由其父類提供的其中一個方法的特定實現,則它被稱為方法覆蓋。所以方法覆蓋有兩個前提條件:繼承和子父類中方
Java繼承知識總結
nbsp ram 類類型 般的 包括 tro 表現 訪問 可見 Java中的繼承作為Java面向對象三大特性之一,在知識點上而言,還是很多的。現做出如下總結: 1. 繼承的概念: 繼承在本職上是特殊——一般的關系,即常說的is-a關系。子類繼承父類,表明子類是一種特殊的父類
Java繼承和構造函數
args 初始 per num ble cells con ons lai 構造函數不是類的成員,它們不是由子類繼承的。它們用於初始化實例變量。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class CSuper {
【Java學習筆記之二十二】解析接口在Java繼承中的用法及實例分析
ani 復制代碼 ads compute 現在 target body 常量 實現接口 一、定義 Java接口(Interface),是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具
Java繼承
多重 子類重寫 tty animal 訪問 str 類構造 style cnblogs 繼承的特性 子類擁有父類非private的屬性,方法。 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。 子類可以用自己的方式實現父類的方法。 Java的繼承是單
JAVA繼承:編譯與運行的關系(編譯看左邊,運行看右邊)
句子 clas http .com 技術分享 eth com 簡單 images “成員變量,靜態方法看左邊;非靜態方法:編譯看左邊,運行看右邊。” 意思是:當父類變量引用子類對象時(Fu f = new Zi();),在這個引用變量f指向的對象中,他的成員變量和靜態方法
Java 繼承與接口的關系
java 接口 繼承 在看Netty中NioEventLoop的UML圖時,感覺非常復雜,如下圖所示: 找不到重點,找不到主線,此時內心生無可戀。 從而,激發出困擾了我很久的一個問題:到底繼承與接口 啥關系? 這個問題,前幾天也請教過同事,也並沒有說出什麽關鍵