Java中,面試官常常會(huì)問(wèn)到覆蓋和重載這兩個(gè)概念。雖然這兩者都與方法有關(guān)系,但是它們是完全不同的。
首先,方法的覆蓋(Override)指的是在子類中重新定義一個(gè)與父類有同樣方法名、返回類型和參數(shù)列表的方法,但是子類方法的具體實(shí)現(xiàn)不同于父類的方法。這樣在使用時(shí),當(dāng)子類對(duì)象調(diào)用這個(gè)方法時(shí),會(huì)優(yōu)先使用子類方法,而不是父類方法。
// 父類 class Parent { public void method() { System.out.println("Parent method"); } } // 子類 class Child extends Parent { @Override public void method() { System.out.println("Child method"); } } public class TestOverride { public static void main(String[] args) { Parent obj = new Child(); obj.method(); // 輸出 Child method } }
而方法的重載(Overload)則是指在一個(gè)類中,如果出現(xiàn)了兩個(gè)或多個(gè)方法,它們的方法名相同而參數(shù)列表不同,那么這些方法就是重載方法。重載方法的返回類型可以不同,但是不能僅僅是返回類型不同而已。在使用時(shí),編譯器會(huì)根據(jù)方法調(diào)用所使用的參數(shù)列表自動(dòng)選擇對(duì)應(yīng)的方法。
class MyClass { public void method(int a) { System.out.println("method(int)"); } public void method(int a, int b) { System.out.println("method(int,int)"); } public void method(String str) { System.out.println("method(String)"); } } public class TestOverload { public static void main(String[] args) { MyClass obj = new MyClass(); obj.method(10); // 輸出 method(int) obj.method(10, 20); // 輸出 method(int,int) obj.method("hello"); // 輸出 method(String) } }
在面試中,要想讓自己更加專業(yè)和有競(jìng)爭(zhēng)力,就需要深刻理解和掌握J(rèn)ava中方法的覆蓋和重載這兩個(gè)概念,將其在實(shí)際開(kāi)發(fā)中應(yīng)用于解決問(wèn)題和增加效率。