1. 程式人生 > >重寫、覆蓋、過載、多型幾個概念的區別分析

重寫、覆蓋、過載、多型幾個概念的區別分析

override->重寫(=覆蓋)、overload->過載、polymorphism -> 多型

override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。
重寫(覆蓋)的規則:
   1、重寫方法的引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.
   2、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private)。
   3、重寫的方法的返回值必須和被重寫的方法的返回一致;
   4、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;
   5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行重寫。
   6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。

overload是過載,一般是用於在一個類內實現若干過載的方法,這些方法的名稱相同而引數形式不同。
過載的規則:
   1、在使用過載時只能通過相同的方法名、不同的引數形式實現。不同的引數型別可以是不同的引數型別,不同的引數個數,不同的引數順序(引數型別必須不一樣);
   2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;
   3、方法的異常型別和數目不會對過載造成影響;

多型的概念比較複雜,有多種意義的多型,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。
一般,我們使用多型是為了避免在父類裡大量過載引起程式碼臃腫且難於維護。

舉個例子:

Java程式碼

注意Triangle類的方法是重寫,而Rectangle類的方法是過載。對兩者比較,可以發現多型對過載的優點:
如果用過載,則在父類裡要對應每一個子類都過載一個取得邊數的方法;
如果用多型,則父類只提供取得邊數的介面,至於取得哪個形狀的邊數,怎樣取得,在子類裡各自實現(重寫)。

相關推薦

重寫覆蓋過載概念區別分析

override->重寫(=覆蓋)、overload->過載、polymorphism -> 多型 override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。 重寫(覆蓋)的規則:    1、重寫方

C++快速入門繼承機制中的構造器和析構器訪問限制覆蓋過載友元

繼承機制中的構造器和析構器 構造器是類初始化建立時呼叫的方法 --構造器的名字就是類的名字 析構器是類執行完後記憶體回收執行的方法 --析構器的名字~類名字 舉例看下在程式碼中執行的順序吧 /* 繼承機制中的構造器和析構器 */ #include

C#:區分:重寫覆蓋過載以及虛方法和抽象方法

(一)重寫和覆蓋: 重寫: 在宣告時,父類的方法前面加上virtual關鍵字,子類的方法前面加上override關鍵字,且與父類方法同名,表示父類的方法可以被子類進行修改和重新定義。 覆蓋: 在宣告子類方法的時候,新增new關鍵字,定義與父類同名的方法,

3【C++】繼承/

    面向物件的三個基本特徵是:封裝、繼承、多型。其中,封裝可以隱藏實現細節,使得程式碼模組化;繼承可以擴充套件已存在的程式碼模組(類);它們的目的都是為了——程式碼重用。而多型則是為了實現另一個目的——介面重用!     封裝:將一類事物所共有的屬性和行為方法進行總結,封裝在一個類中

構造器方法的過載方法的重寫

構造器(constructor)  作用:   --構造器用於構造該類的例項。 怎樣呼叫?   --Java通過new關鍵字來呼叫構造器,從而返回該類的例項。 構造器使用要點 --通過new關鍵字呼叫! --構造器雖然有返回值(返回該類的物件),但是不能定義返回型別 (返

單例模式類的繼承和

一、單例模式   單例模式是一種常用的軟體設計模式,在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中應用該模式的類,一個類只能有一個例項,即一個類只有一個物件例項。 Java中單例模式定義:一個類有且僅有一個例項,並且自行例項化向整個

Java學習筆記 第4天~函式的定義函式的特點函式的過載陣列

函式的定義 就是定義在類中的具有特定功能的獨立一段小程式(函式也稱之為方法) int c=add(3,4); System.out.println("c"+c); public static int add(int a,int b) { returna+b; } /* 修飾符

執行最慢的SQL語句總耗CPU最的前SQL平均耗CPU最的前SQL

--執行最慢的SQL語句 SELECT (total_elapsed_time / execution_count)/1000 N'平均時間ms' ,total_elapsed_time/1000 N'總花費時間ms' ,total_worker_time/1000 N'所用

java的概念AOPIOCDIDIP工廠模式IOC容器

right 做成 概念 數據庫連接 依次 什麽 功能 抽象類 quest 1、AOP:面向切面編程 把一些公共類,比如日誌類、安全類、數據庫連接類、系統統一的認證、權限管理類、資源池(如數據庫連接池的管理)、性能監控等做成一個公共類,當其他類需要時,進行註入(調用)。這樣這

c++三大特性(繼承,封裝,)及過載區別

    封裝可以隱藏實現細節,使得程式碼模組化,繼承可以擴充套件已存在的模組,它們目的都是為了:程式碼重用。而多型是為了實現另一個目的:介面重用。     封裝是面向物件的特徵之一,是物件和類概念的主要特性。封裝是把過程和資料包圍起來,

陣列,繼承,過載,抽象,介面,GUI,內部類

設計層面的六大原則: 單一職責原則: 一個類只做一件事情,一個方法只做一件事,降低程式碼冗餘,提高程式碼複用性。 不要把無關的事情放到方法中來完成。每個方法不要超過20行,10行為最佳。 最少知道原則: 儘量少公開方法或者屬性,對外只公佈介面。 里氏替換原則: 當基類

機器學習神經網路的概念區分

剛接觸機器學習這一塊,對一些基本用語概念比較模糊,比如機器學習、深度學習、人工神經網路這些等等,總是會習慣性混為一談。所以,做一下區分。 機器學習(Machine Learning, ML)是一門多領域交叉學科,它是人工智慧的核心,是使計算機具有智慧的根本途徑,其應用遍及人

關於java流的概念:IOBIONIOAIO

具體來看看java中的幾種流IO/BIOBIO就是指IO,即傳統的Blocking IO,即同步並阻塞的IO。這也是jdk1.4之前的唯一選擇,依賴於ServerSocket實現,即一個請求對應一個執行緒,如果執行緒數不夠連線則會等待空餘執行緒或者拒絕連線。所以用這種方式,在

Http長連線短連線持久連線這三概念分析總結

什麼是Http長連線 長連線定義: client方與server方先建立連線,連線建立後不斷開,然後再進行報文傳送和接收。這種方式下由於通訊連線一直存在。此種方式常用於P2P點對點的通訊。 長連線的操作步驟是:建立連線——資料傳輸...(保持連線)...資料傳輸——關閉

Camera ISO快門光圈曝光這概念

轉載自知乎:https://www.zhihu.com/question/21427664種田要知節氣,開車要懂離合,任何一樣手藝都有行話。雖然我覺得儘量從實際問題說起,儘量不要說的很專業,但有幾個詞卻是談到攝影無法避開的詞,它們是:光圈,快門, 曝光,焦距, ISO,景深

關於oracle的概念:資料庫例項使用者名稱和密碼

雖然有的說,oracle只有一個數據庫,但是可以新建很多個例項,但是一般情況下,資料庫=例項。 oracle裡將,新建一個數據庫,就是新建例項。 結構是張這樣的:                                                      

線性規劃動態規劃等概念

線性規劃: 在數學中,線性規劃(Linear Programming,簡稱LP)問題是目標函式和約束條件都是線性的最優化問題。 動態規劃: 動態規劃(英語:Dynamic programming,DP)是一種在數學、電腦科學和經濟學中使用的,通過把原問題分解為相對簡單的子

Ubuntu下檢視CPU記憶體和硬碟詳細資訊的命令

轉載自:【http://www.sijitao.NET/1749.html】 CPU: 型號:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 數量:lscpu |grep "CPU socket" |

oracle中service_namesidtablespaceinstance_name概念的理解

ORACLE中DB_NAME,DB_DOMAIN,GLOBAL_DBNAME,SERVICE_NAME,ORACLE_SID,INSTANCE_NAME,SCHAME概念。之前對這些概念有接觸,但一直

子類繼承父類,重寫父類方法,運用時呼叫重寫的方法時呼叫子類的還是呼叫父類的?

package 第五天; public class Person { public void say() { System.out.println("我是Person的say方法"); } } 子類Student如下: package 第五天; publ