面向對象重寫(override)與重載(overload)區別

一、重寫(override)

override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用于子類在繼承父類時,重寫(重新實現)父類中的方法。

重寫(覆蓋)的規則:

?? 1、重寫方法的參數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.

?? 2、重寫方法的訪問修飾符一定要大于被重寫方法的訪問修飾符(public>protected>default>private)。

?? 3、重寫的方法的返回值必須和被重寫的方法的返回一致;

?? 4、重寫的方法所拋出的異常必須和被重寫方法的所拋出的異常一致,或者是其子類;

?? 5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,并沒s有對其進行重寫。

?? 6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。

?

override就是子類將父類的方法重新實現了一遍。
new就是說這個方法就是子類自己的,跟父類沒有任何繼承關系關系,僅僅是重名 public class A{public virtual string Function(){return "1";}}public class B : A{public override string Function(){return "2";}}public class C : A{public new string Function(){return "3";}}public class JustForTest{public void DoTest(){B b = new B();C c = new C();Console.WriteLine(b.Function());Console.WriteLine(c.Function());Console.WriteLine((b as A).Function());//這兩個就體現出來了,B還是調用自己,返回2Console.WriteLine((c as A).Function());//C調用的是基類,返回0
        }}
View Code

?

?二、overload是重載,一般是用于在一個類內實現若干重載的方法,這些方法的名稱相同而參數形式不同。

重載的規則:

?? 1、在使用重載時只能通過相同的方法名、不同的參數形式實現。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣);

?? 2、不能通過訪問權限、返回類型、拋出的異常進行重載;

?? 3、方法的異常類型和數目不會對重載造成影響;

多態的概念比較復雜,有多種意義的多態,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多態則是父類使用子類的方法。

一般,我們使用多態是為了避免在父類里大量重載引起代碼臃腫且難于維護。

舉個例子:

?

?

public class Shape{public static void main(String[] args){Triangle tri = new Triangle();System.out.println("Triangle is a type of shape? " + tri.isShape());// 繼承
Shape shape = new Triangle();System.out.println("My shape has " + shape.getSides() + " sides."); // 多態
Rectangle Rec = new Rectangle();Shape shape2 = Rec;System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重載
}public boolean isShape(){return true;}public int getSides(){return 0 ;}public int getSides(Triangle tri){ //重載return 3 ;}public int getSides(Rectangle rec){ //重載return 4 ;}}class Triangle extends Shape{public int getSides() { //重寫,實現多態return 3;}}class Rectangle extends Shape{public int getSides(int i) { //重載return i;}}
View Code

?

注意Triangle類的方法是重寫,而Rectangle類的方法是重載。對兩者比較,可以發現多態對重載的優點:

如果用重載,則在父類里要對應每一個子類都重載一個取得邊數的方法;

如果用多態,則父類只提供取得邊數的接口,至于取得哪個形狀的邊數,怎樣取得,在子類里各自實現(重寫)。

?

轉載于:https://www.cnblogs.com/Tanghongchang/p/7140533.html

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

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

相關文章

cartographer學習筆記--如何保存cartagrapher_ros建好的地圖

今天開始跟著網友大佬學習cartographer. 1. 如何保存cartographer的地圖數據 在運行cartographer過程中可以隨時保存建好的地圖,步驟如下: 首先是重新打開一個terminal, 如果你沒有將你的cartographer_ros下的setup.bash文件寫入到.bashrc中&#xff…

Java微信公眾號開發(五)—— SVN版本控制工具

1 作用 兩個疑問: 什么是版本控制?為什么要用版本控制工具?作用: 受保護受約束合作開發中,版本控制工具更重要的作用就是讓開發者更好地協作,每個人的代碼既能互相調用,來共同完成一個較大的功…

Linux之《荒島余生》(二)CPU篇

為什么80%的碼農都做不了架構師?>>> 溫馨提示,動圖已壓縮,流量黨放心查看。CPU方面內容不多,我們順便學點命令。本篇是《荒島余生》系列第二篇,垂直觀測CPU。其余參見: Linux之《荒島余生》&am…

PTA 06-圖2 Saving James Bond - Easy Version (25分)

題目地址 https://pta.patest.cn/pta/test/16/exam/4/question/672 5-10 Saving James Bond - Easy Version (25分) This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by…

Ubuntu16.04上安裝kitti2bag

kitti2bag是一個可以將kitti數據集轉換為bag文件的工具,可以直接通過pip進行安裝。由于kitti2bag中使用到ros,所以安裝時你使用的python版本應該是2.7的因為ros只有在Python2.7時才能正常工作。比如說我,我安裝了conda,在conda中安…

Nginx之windows下搭建

去nginx.org下載nginx 以nginx-1.8.1為例解壓到D盤nginx-1.8.1目錄 假設NGINX_HOME為D:\nginx-1.8.1 3種啟動途徑: 一、雙擊nginx.exe圖標,可見黑窗口一閃而過,啟動完畢。 二、命令行到nginx目錄,輸入nginx啟動。(注&a…

單片機錯誤筆記

記錄下使用單片機過程中的一些錯誤,便于以后查詢: 單片機型號:STC15F2K60S2 晶振:18.432 報錯代碼: *** WARNING L1: UNRESOLVED EXTERNAL SYMBOLSYMBOL: REC_DAT1MODULE: .\Objects\usart.obj (USART) …

軟件開發記錄03

今天我完成了軟件設置&#xff0c;預算列表&#xff0c;添加預算的頁面布局。 &#xff08;1&#xff09;軟件設置 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"…

395. Longest Substring with At Least K Repeating Characters

題目要求 Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no less than k times.Example 1:Input: s "aaabb", k 3Output: 3The longest substring is "aaa&qu…

UICollectionView 具體解說學習

UICollectionView 和UITableView非常像,是APPLE公司在iOS 6后推出的用于處理圖片這類UITableView 布局困難的控件,和UITableView 一樣,它也有自己的Datasource和delegate。以下具體說下像這種方式的效果. 首先來看看UICollectionView 的DataSource。protocol UICollectionView…

70.文件異常

ferror檢測文件異常perror提示文件錯誤信息clearerr清除異常,讓文件指針回到開頭完整代碼 1 #define _CRT_SECURE_NO_WARNINGS2 #include<stdio.h>3 #include<stdlib.h>4 //perror提示文件錯誤信息5 //ferror檢測文件異常6 //clearerr清除異常,讓文件指針回到開頭…

ServiceNow 中關于UI Action 在portal端的使用

在 portal端是可以使用Form和UI Action的&#xff0c;例如&#xff1a;var data.f $sp.getForm()&#xff1b;//需要添加上相應參數在開箱組件Form的Server script中就有如下代碼&#xff1a;data.f $sp.getForm(data.table, data.sys_id, data.query, data.view);data.f對象中…

特殊密碼鎖

總時間限制: 1000ms內存限制: 1024kB描述有一種特殊的二進制密碼鎖&#xff0c;由n個相連的按鈕組成&#xff08;n<30&#xff09;&#xff0c;按鈕有凹/凸兩種狀態&#xff0c;用手按按鈕會改變其狀態。 然而讓人頭疼的是&#xff0c;當你按一個按鈕時&#xff0c;跟它相鄰…

系統安全題目(二)

1、在 php mysql apache 架構的web服務中輸入GET參數 index.php?a1&a2&a3 服務器端腳本 index.php 中$GET[a] 的值是&#xff1f;正確答案: C A 1B 2C 3D 1,2,3 2、以下哪些不是CSRF漏洞的防御方案&#xff1f;正確答案: D A 檢測HTTPrefererB 使用隨機tokenC 使用驗…

轉發和重定向的區別?

實際發生位置不同&#xff0c;地址欄不同 轉發是發生在服務器的 轉發是由服務器進行跳轉的&#xff0c;細心的朋友會發現&#xff0c;在轉發的時候&#xff0c;瀏覽器的地址欄是沒有發生變化的&#xff0c;在我訪問Servlet111的時候&#xff0c;即使跳轉到了Servlet222的頁面&a…

BZOJ3795 : 魏總刷DP

對于HARD&#xff1a; 需要滿足$ku[i]\times k\leq Tlate[i]$。 對于EASY&#xff1a; 需要滿足$ku[i]\times k\leq T-rest[i]$。 故對于HARD&#xff0c;設$a[i]-late[i]$&#xff0c;對于EASY&#xff0c;設$a[i]rest[i]$&#xff0c;并將所有題目的$u[i]$都$1$。 那么需要滿…

信息學競賽相關優秀文章合集[持續更新]

線段樹詳解 &#xff08;原理&#xff0c;實現與應用&#xff09;可持久化線段樹 簡介 運用伸展樹解決數列維護問題.pdfSplay 學習筆記&#xff08;一&#xff09;Splay 學習筆記&#xff08;二&#xff09;Splay 學習筆記&#xff08;三&#xff09; 請要相信我&#xff0c;30…

ceres-solver學習筆記

前一段時間總有一個想法&#xff0c;那就是&#xff0c;我只直到視覺slam是遠遠不夠的&#xff0c;激光slam仍然是一個比較穩妥的技術&#xff0c;好落地&#xff0c;應用廣泛&#xff0c;我想著&#xff0c;如果我學會了會大大增加自己的核心競爭力&#xff0c;所以我抽時間開…

幾款常見的視頻格式轉換器

在短視頻占半壁江山的時候&#xff0c;關于體積、格式等成了困擾人們的因素&#xff0c;視頻太大不利于傳播&#xff0c;比如微信里就限制了傳輸的大小不得超過20M&#xff0c;所以其實說起來工作上QQ的性能遠超微信。今天這里小編給大家總結幾款常用的視頻轉換器&#xff0c;希…

PHP Shell生成工具Weevely

PHP Shell生成工具WeevelyWeevely是一款模擬Telnet連接的PHP Shell工具。它不提供網頁形式的接口&#xff0c;而是提供一個命令形式的終端。滲透測試人員首先使用該工具生成對應的PHP網頁。然后&#xff0c;將該網頁上傳到目標Web服務器上。滲透人員就可以在終端連接該頁面&…