Java中的繼承:父類和子類的關系


一、父類引用指向子類對象時

 

1、若子類覆蓋了某方法,則父類引用調用子類重新定義的新方法

2、若子類未覆蓋某方法,則父類引用調用父類本身的舊方法

3、若子類覆蓋了某屬性,但父類引用仍調用父類本身的舊屬性

4、若子類未覆蓋某屬性,則父類引用調用父類本身的舊屬性

5、父類引用不能訪問子類新定義的方法

 

二、子類引用指向自身對象時

 

 

1、若子類覆蓋了某方法,則子類引用調用子類重新定義的新方法

2、若子類未覆蓋某方法,則子類引用調用父類本身的舊方法

3、若子類覆蓋了某屬性,則子類引用調用子類重新定義的新屬性

4、若子類未覆蓋某屬性,則子類引用調用父類本身的舊屬性

5、子類引用可以訪問子類新定義的方法

 

三、示例代碼

 
B.java
[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. public class B {  
  2.   
  3.     int a = 1;  
  4.     int b = 2;  
  5.   
  6.     void f1() {  
  7.         System.out.println("B.f1()");  
  8.     }  
  9.   
  10.     void f2() {  
  11.         System.out.println("B.f2()");  
  12.     }  
  13.   
  14. }  

C.java
[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. public class C extends B {  
  2.   
  3.     int a = 3;  
  4.   
  5.     @Override  
  6.     void f1() {  
  7.         System.out.println("C.f1()");  
  8.     }  
  9.   
  10.     void f3() {  
  11.         System.out.println("C.f3()");  
  12.     }  
  13.   
  14.     public static void main(String[] args) {  
  15.   
  16.         B b = new C();// 父類引用指向子類對象  
  17.         b.f1();// 子類覆蓋了該方法,所以父類引用調用新方法  
  18.         b.f2();// 子類未覆蓋該方法,所以父類引用調用舊方法  
  19.         // b.f3();此行去掉注釋會報錯,父類引用不能訪問子類新定義方法  
  20.         System.out.println(b.a);// 子類覆蓋了該屬性,但父類引用仍舊訪問舊屬性  
  21.         System.out.println(b.b);// 子類未覆蓋該屬性,父類訪問舊屬性  
  22.   
  23.         System.out.println();  
  24.   
  25.         C c = new C();// 子類引用指向自身對象  
  26.         c.f1();// 子類覆蓋了父類方法,所以調用新方法  
  27.         c.f2();// 子類未覆蓋父類方法,所以調用舊方法  
  28.         c.f3();// 子類調用自己新定義的方法  
  29.         System.out.println(c.a);// 子類覆蓋了該屬性,所以訪問新屬性  
  30.         System.out.println(c.b);// 子類未覆蓋該屬性,所以訪問舊屬性  
  31.     }  
  32. }  

輸出:
[html]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. C.f1()  
  2. B.f2()  
  3. 1  
  4. 2  
  5.   
  6. C.f1()  
  7. B.f2()  
  8. C.f3()  
  9. 3  
  10. 2  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM