在Java中,隱藏和覆蓋是兩個(gè)非常重要的概念,它們都涉及到類和方法之間的關(guān)系。雖然這兩個(gè)概念看起來(lái)相似,但是它們之間有一些關(guān)鍵的區(qū)別。
隱藏指的是在子類中定義了與父類中同名的方法或者變量,此時(shí)父類中同名的方法或變量將被隱藏。子類對(duì)象調(diào)用該方法或變量時(shí),將只能訪問(wèn)到子類中定義的方法或者變量,無(wú)法訪問(wèn)到父類中同名的方法或者變量。
public class Parent{ public void print() { System.out.println("Parent Method"); } } public class Child extends Parent{ public void print() { System.out.println("Child Method"); } public static void main(String args[]) { Child obj = new Child(); obj.print(); } }
在上面的例子中,子類Child繼承了父類Parent中的print()方法,并重寫了該方法。此時(shí),當(dāng)我們創(chuàng)建Child類對(duì)象,并調(diào)用print()方法時(shí),將輸出"Child Method"。這是因?yàn)樽宇愔貙懥烁割愔械膒rint()方法,子類對(duì)象調(diào)用該方法時(shí)將只能訪問(wèn)到子類中的方法,而無(wú)法訪問(wèn)到父類中的方法。
覆蓋指的是在子類中重寫了父類中同名的方法,此時(shí)子類對(duì)象調(diào)用該方法時(shí)將優(yōu)先調(diào)用子類中定義的方法,如果該方法沒(méi)有在子類中被定義,則將優(yōu)先調(diào)用父類中的相應(yīng)方法。
public class Parent{ public void print() { System.out.println("Parent Method"); } } public class Child extends Parent{ public void print() { super.print(); // 調(diào)用父類中的print()方法 System.out.println("Child Method"); } public static void main(String args[]) { Child obj = new Child(); obj.print(); } }
在上面的例子中,子類Child繼承了父類Parent中的print()方法,并在子類中重寫了該方法。此時(shí),當(dāng)我們創(chuàng)建Child類對(duì)象,并調(diào)用print()方法時(shí),將輸出"Parent Method"和"Child Method"。這是因?yàn)樽宇愔貙懥烁割愔械膒rint()方法,并在子類中調(diào)用了父類中的print()方法,子類對(duì)象調(diào)用該方法時(shí)優(yōu)先調(diào)用子類中的方法,如果子類中未定義該方法,則將優(yōu)先調(diào)用父類中的方法。