Java是一個面向對象的編程語言,面向對象的核心是繼承。在繼承中,有兩個概念:重寫和復寫。這兩個概念看起來非常相似,但是實際上他們有很大的區別。
重寫和復寫都是指子類對從父類或接口繼承而來的方法的重新定義。但是,兩者的實現方式和運行方式有很大的不同。
重寫(Override)是指一個子類重新定義了從父類或接口繼承而來的方法,但是方法名和參數列表必須與原方法保持一致。重寫實現的方法必須是父類或接口中聲明的方法的具體實現。
public class A { public void foo() { System.out.println("A.foo()"); } } public class B extends A { @Override public void foo() { System.out.println("B.foo()"); } }
上面的代碼中,B類重寫了A類中的foo()方法,在B類中重新定義了foo()方法的具體實現。重寫之后,當我們通過B類的對象來調用foo()方法時,實際上會調用B類中的foo()方法。
復寫(Overload)是指子類定義了一個與從父類或接口繼承而來的方法名相同但是參數列表不同的方法。復寫實現的方法必須與父類或接口中聲明的方法的功能相同。
public class C { public void bar(int a) { System.out.println("C.bar(int)"); } } public class D extends C { public void bar(String a) { System.out.println("D.bar(String)"); } }
上面的代碼中,D類復寫了C類中的bar()方法,在D類中定義了一個參數為String類型的bar()方法。當我們通過D類的對象來調用bar()方法時,如果傳入的參數是String類型的,實際上會調用D類中的bar(String)方法,如果傳入的參數是int類型的,會調用C類中的bar(int)方法。
綜上所述,重寫和復寫看起來非常相似,但是他們的實現方式和運行方式有很大的不同。重寫是指子類重新定義從父類或接口繼承而來的方法,必須保證方法名和參數列表與原方法保持一致;復寫是指子類定義一個與從父類或接口繼承而來的方法名相同但是參數列表不同的方法,必須保證實現的方法與原方法的功能相同。
下一篇css左至右漸變