方法的重寫(Overriding)和重載(Overloading)是java多態性的不一樣表現,重寫是父類與子類之間多態性的一種表現,重載能夠理解成多態的具體表現形式。java
重寫是子類對父類的容許訪問的方法的實現過程進行從新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!ide
重寫的好處在於子類能夠根據須要,定義特定於本身的行爲。 也就是說子類可以根據須要實現父類的方法。函數
重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如: 父類的一個方法申明瞭一個檢查異常 IOException,可是在重寫這個方法的時候不能拋出 Exception 異常,由於 Exception 是 IOException 的父類,只能拋出 IOException 的子類異常。spa
要想調用父類中被重寫的方法,則必須使用關鍵字 super。code
要求:對象
在面向對象原則裏,重寫意味着能夠重寫任何現有方法。實例以下:blog
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();// 執行 Animal 類的方法 b.move();//執行 Dog 類的方法 } }
輸出結果:io
動物能夠移動
狗能夠跑和走
重載(overloading) 是在一個類裏面,方法名字相同,而參數不一樣。返回類型能夠相同也能夠不一樣。table
每一個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。class
最經常使用的地方就是構造器的重載。
重載規則:
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)); } }
重載和重寫區別:
區別點 | 重載方法 | 重寫方法 |
---|---|---|
參數列表 | 必須修改 | 必定不能修改 |
返回類型 | 能夠修改 | 必定不能修改 |
異常 | 能夠修改 | 能夠減小或刪除,必定不能拋出新的或者更廣的異常 |
訪問 | 能夠修改 | 必定不能作更嚴格的限制(能夠下降限制) |