Java 重寫(Override)與重載(Overload)


重寫(Override)

重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫!返回值和形參都不能改變。即外殼不變,核心重寫!

重寫的好處在于子類可以根據需要,定義特定于自己的行為。

也就是說子類能夠根據需要實現父類的方法。

在面向對象原則里,重寫意味著可以重寫任何現有方法。實例如下:

class Animal{

public void move(){
System.out.println(“動物可以移動”);
}
}

class Dog extends Animal{

public void move(){
System.out.println(“狗可以跑和走”);
}
}

public class TestDog{

public static void main(String args[]){
Animal a = new Animal(); // Animal 對象
Animal b = new Dog(); // Dog 對象

  a.move();<span class="hljs-comment">// 執行 Animal 類的方法</span>b.move();<span class="hljs-comment">//執行 Dog 類的方法</span>

}
}

以上實例編譯運行結果如下:

動物可以移動
狗可以跑和走

在上面的例子中可以看到,盡管b屬于Animal類型,但是它運行的是Dog類的move方法。

這是由于在編譯階段,只是檢查參數的引用類型。

然而在運行時,Java虛擬機(JVM)指定對象的類型并且運行該對象的方法。

因此在上面的例子中,之所以能編譯成功,是因為Animal類中存在move方法,然而運行時,運行的是特定對象的方法。

思考以下例子:

class Animal{

public void move(){
System.out.println(“動物可以移動”);
}
}

class Dog extends Animal{

public void move(){
System.out.println(“狗可以跑和走”);
}
public void bark(){
System.out.println(“狗可以吠叫”);
}
}

public class TestDog{

public static void main(String args[]){
Animal a = new Animal(); // Animal 對象
Animal b = new Dog(); // Dog 對象

  a.move();<span class="hljs-comment">// 執行 Animal 類的方法</span>b.move();<span class="hljs-comment">//執行 Dog 類的方法</span>a.bark();<span class="hljs-comment">//執行 Animal 類的方法</span>

}
}

以上實例編譯運行結果如下:

TestDog.java:30: cannot find symbol
symbol : method bark()
location: class Animal
a.bark()
;
^

該程序將拋出一個編譯錯誤,因為a的引用類型Animal沒有bark方法。


方法重寫的規則

  • 參數列表必須完全與被重寫方法的相同;
  • 返回類型必須完全與被重寫方法的返回類型相同;
  • 子類方法的訪問權限必須大于或等于父類方法的訪問權限。例如:如果父類的一個方法被聲明為public,那么在子類中重寫該方法就不能聲明為protected。
  • 父類的成員方法只能被它的子類重寫。
  • 聲明為final的方法不能被重寫。
  • 聲明為static的方法不能被重寫,但是能夠被再次聲明。
  • 子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了聲明為private和final的方法。
  • 子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為public和protected的非final方法。
  • 重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
  • 構造方法不能被重寫。
  • 如果不能繼承一個方法,則不能重寫這個方法。

Super關鍵字的使用

當需要在子類中調用父類的被重寫方法時,要使用super關鍵字。

class Animal{

public void move(){
System.out.println(“動物可以移動”);
}
}

class Dog extends Animal{

public void move(){
super.move(); // 應用super類的方法
System.out.println(“狗可以跑和走”);
}
}

public class TestDog{

public static void main(String args[]){

  Animal b = <span class="hljs-keyword">new</span> Dog(); <span class="hljs-comment">//</span>b.move(); <span class="hljs-comment">//執行 Dog類的方法</span>

}
}

以上實例編譯運行結果如下:

動物可以移動
狗可以跑和走

重載(Overload)

重載(overloading) 是在一個類里面,方法名字相同,而參數不同。返回類型呢?可以相同也可以不同。

每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。

只能重載構造函數

重載規則

  • 被重載的方法必須改變參數列表;
  • 被重載的方法可以改變返回類型;
  • 被重載的方法可以改變訪問修飾符;
  • 被重載的方法可以聲明新的或更廣的檢查異常;
  • 方法能夠在同一個類中或者在一個子類中被重載。

實例

public class Overloading {

public int test(){
System.out.println(“test1”);
return 1;
}

public void test(int a){
System.out.println(“test2”);
}

//以下兩個參數類型順序不同
public String test(int a,String s){
System.out.println(“test3”);
return “returntest3”;
}

public String test(String s,int a){
System.out.println(“test4”);
return “returntest4”;
}

public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,“test3”));
System.out.println(o.test(“test4”,1));
}


重寫與重載之間的區別

區別點重載方法重寫方法
參數列表必須修改一定不能修改
返回類型可以修改一定不能修改
異常可以修改可以減少或刪除,一定不能拋出新的或者更廣的異常
訪問可以修改一定不能做更嚴格的限制(可以降低限制)


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

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

相關文章

銀聯pos小票word模板_商家pos機刷卡必須知道的知識

相信很多卡友伙伴或者商鋪店家都裝有pos機&#xff0c;然后一般pos機都沒有使用說明書&#xff0c;更沒有結合刷卡方法在內的秘籍。今天我就分享下刷卡必須知道的一些知識。剛剛辦理pos機的當天一定要注意&#xff1a;使用之前呢&#xff0c;務必核對一下基本信息&#xff0c;例…

《Ext JS權威指南》——2.4節關于Ext.onReady

2.4 關于Ext.onReady 代碼為什么寫在Ext.onReady中&#xff0c;而不是在body中添加一個onload事件并在onload事件中運行呢&#xff1f;主要原因是Ext.onReady在DOM模型加載完畢后即可進行操作&#xff0c;而無需像onload事件那樣&#xff0c;等待頁面的所有資源都加載完畢后才…

git push 提交時顯示 Empty reply from server的解決辦法

輸入 git fetch origin --prune 參考鏈接&#xff1a;https://stackoverflow.com/questions/28364023/gits-error-on-push-empty-reply-from-server 轉載于:https://www.cnblogs.com/team42/p/6941678.html

轉]移動視頻監控(1)---項目綜述

對于市場上的視頻監控系統&#xff0c;大家都有一定的了解&#xff0c;就是視頻采集&#xff0c;經過無線/有線發送到服務或代理&#xff0c;客戶從服務或代理上得到視頻/音頻流。不復雜。 對于不遠的將來&#xff0c;3G&#xff0c;4G的到來&#xff0c;對移動的業務有一個推動…

java 空接口_學Java,java接口搞明白了嗎?大牛讓你一文搞清楚

前言對于面向對象編程來說&#xff0c;抽象是一個極具魅力的特征。如果一個程序員的抽象思維很差&#xff0c;那他在編程中就會遇到很多困難&#xff0c;無法把業務變成具體的代碼。在 Java 中&#xff0c;可以通過兩種形式來達到抽象的目的&#xff0c;一種是抽象類&#xff0…

Check Point CEO:“我們正在積極尋找收購目標”

Check Point Sofrware Technologies很可能成為下一個會產生收購案的主流安全廠商&#xff0c;首席執行官Gil Shwed在該公司第二季度財報電話會議上這樣表示。 “我們正在積極地尋求收購目標&#xff0c;期待無論是大規模的還是小規模的擴張&#xff0c;”Shwed表示。“我們在并…

Spark SQL 編程API入門系列之SparkSQL數據源

不多說&#xff0c;直接上干貨&#xff01; SparkSQL數據源&#xff1a;從各種數據源創建DataFrame 因為 spark sql&#xff0c;dataframe&#xff0c;datasets 都是共用 spark sql 這個庫的&#xff0c;三者共享同樣的代碼優化&#xff0c;生成以及執行流程&#xff0c;所以 s…

H.264中的一些易混淆概念

Q:PSNR 峰值信噪比 Q:是根據它來取qp是不是&#xff1f; A:不是, 和QP沒有直接關系, 但是QP的選擇會影響到PSNR Q: 如果不用率失真最優化&#xff0c; 為什么選擇SATD&#xff0b;deltar&#xff08;mv&#xff0c;mode&#xff09;作為模式選擇的依據&#xff1f;為什么運…

Java中final關鍵字的幾種用法

在java的關鍵字中&#xff0c;static和final是兩個我們必須掌握的關鍵字。不同于其他關鍵字&#xff0c;他們都有多種用法&#xff0c;而且在一定環境下使用&#xff0c;可以提高程序的運行性能&#xff0c;優化程序的結構。下面我們來了解一下final關鍵字及其用法。 final關鍵…

python pyqt5安裝_Python3 安裝PyQt5及exe打包圖文教程

環境: Python 3.6.4 Pycharm Professional 2017.3.3 PyQt5 PyQt5-tools① Python 3 安裝Python 3.x 安裝時&#xff0c;默認勾選ADD Python 3.6 to PATH和ADD Python to environment variables的情況下&#xff0c;系統會向path中增加以下兩個環境變量。D:\Program Files\Py…

《企業軟件交付:敏捷與高效管理精要》——3.4 企業軟件交付的軟件工廠方法...

3.4 企業軟件交付的軟件工廠方法 正如我們前面討論的&#xff0c;今天的機構面對的商業環境正以前所未有的速度發生變化。與此同時&#xff0c;這些機構還要管理和降低整個機構的運營成本。這就直接意味著&#xff0c;他們不僅要最大限度地減少浪費和低效率&#xff0c;還要提…

201706問題記錄

1.四周陰影 box-shadow:0px 0px 10px #f5f5f5; 2. 原生setattribute()方法 jquery的attr()$(.fd-sq-zk).attr("title","收起"); 3.在iframe中獲取外層容器的元素 屬性等 $(parent.document).find("html")..... 4.監聽頁面變大變小事件 /…

一致性hash算法_(圖文案例)一致性哈希算法詳解 一點課堂(多岸教育)

一致性Hash算法關于一致性Hash算法&#xff0c;在我之前的博文中已經有多次提到了&#xff0c;MemCache超詳細解讀一文中”一致性Hash算法”部分&#xff0c;對于為什么要使用一致性Hash算法、一致性Hash算法的算法原理做了詳細的解讀。算法的具體原理這里再次貼上&#xff1a;…

《HTML5 Canvas游戲開發實戰》——2.1 繪制基本圖形

本節書摘來自華章計算機《HTML5 Canvas游戲開發實戰》一書中的第2章&#xff0c;第2.1節,作者&#xff1a;張路斌著&#xff0c; 更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 2.1 繪制基本圖形 所謂基本圖形&#xff0c;就是指線、矩形、圓等最簡單的圖形&#x…

如何查看Ubuntu版本

有時候需要查看一下系統安裝的Ubuntu的版本&#xff0c;最簡單的方式是輸入lsb_release -a。whatis lsb_release輸出&#xff1a;print distribution-specific information。所以lsb_release這個命令就是用來輸出發行版的信息的。 Open the Terminal enter:lsb_release -a It w…

linux下.a/.so/.la目標庫區別

在linux平臺上編譯時&#xff0c;常會遇到目標庫的疑問&#xff0c;有靜態庫也有動態庫&#xff0c;單個理解都不太難&#xff0c;但是對復雜的工程而言&#xff0c;一旦混合到一起去&#xff0c;對整個工程的理解和調用&#xff0c;將會造成很大困擾&#xff0c;本文就匯總這幾…

python 二元函數繪制_Python繪制二元函數曲面

微實踐&#xff1a;繪制二元函數曲面我們將演示如何借助于ufunc的廣播運算計算下述二元函數的在一個xy平面上的值并將其繪制成3D曲面。其中&#xff0c;x和y的取值范圍均為[-2,2]。為了達到目的&#xff0c;我們需要一個二維的結果數組z&#xff0c;其元素的下標對應參數x,y的取…

Npgsql使用入門(三)【批量導入數據】

Program.cs代碼: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

遠程網絡視頻監視技術

目前要實現廣域網視頻監視&#xff0c;主要通過三種方式實現&#xff1a;1.硬盤錄像機&#xff1b;2.網絡視頻服務器&#xff1b;3.網絡攝像機。 硬盤錄像機是一個以錄像為主的設備&#xff0c;有的可以支持IE瀏覽。網絡視頻服務器一般前端不錄像&#xff0c;直接將影像傳輸到…

Deepin下java開發環境部署

簡介 本經驗由深度論壇用戶(zhang12345shun)分享&#xff0c;原文地址 正文 SUN JDK&#xff08;現已改名Oracle JDK&#xff09; 1.下載Sun版JDK壓縮包&#xff08;.tar.gz&#xff09;&#xff0c;選擇其中的32/64位Linux版本。 2.將其解壓縮&#xff1a; sudo tar -zx…