覆蓋和隱藏的區(qū)別
- 覆蓋是對于實例方法而言的
- 子類的靜態(tài)方法也不能覆蓋父類的實例方法(編譯時報錯)
- 方法不能交叉覆蓋:子類實例方法不能覆蓋父類的靜態(tài)方法竞思,
- 隱藏
隱藏是對于靜態(tài)方法和成員變量(靜態(tài)變量和實例變量)而言的,局部變量和形參不被隱藏
(1)當(dāng)發(fā)生隱藏的時候掖桦,聲明類型是什么類店乐,就調(diào)用對應(yīng)類的屬性或者方法,而不會發(fā)生動態(tài)綁定
(2) 屬性只能被隱藏,不能被覆蓋
(3)變量可以交叉隱藏:子類實例變量/靜態(tài)變量可以隱藏父類的實例/靜態(tài)變量
- 隱藏和覆蓋的區(qū)別
* (1)被隱藏的屬性,在子類被強(qiáng)制轉(zhuǎn)換成父類后捞奕,訪問的是父類中的屬性
在無強(qiáng)制轉(zhuǎn)換時子類要訪問父類的屬性使用super關(guān)鍵字
* (2)被覆蓋的方法芒珠,在子類被強(qiáng)制轉(zhuǎn)換成父類后烛卧,調(diào)用的還是子類自身的方法
子類要是想訪問父類的方法,可以使用super關(guān)鍵字
- 4妓局、常見的筆試面試題
1..public class Test {
2. public static void main(String[] args) {
3. Circle circle = new Circle();//本類引用指向本類對象
4. Shape shape = new Circle();//父類引用指向子類對象(會有隱藏和覆蓋)
5.
6. System.out.println(circle.name);
7. circle.printType();
8. circle.printName();
9. //以上都是調(diào)用Circle類的方法和引用
10.
11. System.out.println(shape.name);//調(diào)用父類被隱藏的name屬性
12. shape.printType();//調(diào)用子類printType的方法
13. shape.printName();//調(diào)用父類隱藏的printName方法
14. }
15.}
16.
17.class Shape {
18. public String name = "shape";
19.
20. public Shape(){
21. System.out.println("shape constructor");
22. }
23.
24. public void printType() {
25. System.out.println("this is shape");
26. }
27.
28. public static void printName() {
29. System.out.println("shape");
30. }
31.}
32.
33.class Circle extends Shape {
34. public String name = "circle"; //父類屬性被隱藏
35.
36. public Circle() {
37. System.out.println("circle constructor");
38. }
39.
40. //對父類實例方法的覆蓋
41. public void printType() {
42. System.out.println("this is circle");
43. }
44.
45. //對父類靜態(tài)方法的隱藏
46. public static void printName() {
47. System.out.println("circle");
48. }
49.}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者