在Java中,隱藏(隱藏)和覆蓋(覆蓋)是一種常見的類設計概念。這些概念涉及不同的方法實現方式,這在面試中經常被問及。在這篇文章中,我們將討論這些概念及其在Java中的應用。
隱藏是指當子類定義了與父類相同名稱的方法時,子類中定義的方法將隱藏(覆蓋)父類中的方法。這種行為被稱為方法重載。隱藏只是替換了父類方法的實現,而不會覆蓋父類方法的行為或簽名。以下是一個簡單的示例,說明隱藏的概念:
public class Parent { public void display() { System.out.println("Parent's display()"); } } public class Child extends Parent { public void display() { System.out.println("Child's display()"); } } public class Main { public static void main(String args[]) { Parent p = new Child(); p.display(); } }
在這個例子中,子類Child定義了一個名為display的方法,與父類Parent中的方法同名。當調用p.display()時,輸出將是“Child's display()”而不是“Parent's display()”。這個例子說明了隱藏的概念,通過直接調用子類對象的方法,隱藏了父類對象的方法。
覆蓋(覆蓋)是指在子類中重新實現父類方法,以適應子類的需求。Java中的方法覆蓋要求子類中的方法與父類中的方法具有相同的名稱、參數類型和返回類型。同樣,方法覆蓋也稱為運行時多態性,因為具體執行哪個方法在運行時被決定。以下是一個簡單的示例,說明覆蓋的概念:
public class Animal { public void sound() { System.out.println("Animal is making a sound"); } } public class Dog extends Animal { public void sound() { System.out.println("Dog is barking"); } } public class Main { public static void main(String args[]) { Animal animal = new Dog(); animal.sound(); } }
在這個例子中,子類Dog覆蓋了父類Animal的sound()方法。當調用animal.sound()時,輸出將是“Dog is barking”,而不是“Animal is making a sound”。這個例子說明了覆蓋的概念,通過子類中重新實現的方法,將原先的方法覆蓋掉了。
總之,在Java中,隱藏和覆蓋是常用的類設計概念。了解這些概念及其作用可以幫助程序員更好地設計和實現Java類。此外,在面試中,問及這些概念的問題也是非常常見的。