java this 子類調父類,父類再調用子類已覆蓋的方法及屬性(又一次理解)


之前一直以為 this關鍵字 是指調用者對象,但是這次才真正理解,this代表當前對象,但是指向調用者對象,其實就是多態的用法,如下所示:B 繼承了 A,在B 中調用A類的方法,在A 中用this 訪問成員變量和方法,此時,如果用this訪問成員變量,如下,this.s ,無論B 子類有沒有 s屬性,又或者s 的修飾符是 private 或者 public ,this.s 永遠會打印出 當前類的 s屬性值,原因:成員變量不能被重寫,不能覆蓋  ;再說,用this訪問方法,如下所示: 在A 中 this.test() , 請注意,此時,this代表A 類,但是指向B ,如: A  a = new B() ;      因為 B 類 重寫了父類的test方法,所以會調用B 的test 方法 ;       再如,將A 類的test方法改成 private類型的,此時 this.test()將調用A 類的 test方法,因為此時雖然B 類也有test方法,但是這個方法不是重寫A類的方法,是一個自己獨有的方法,因為父類是private私有的類型,子類不能擁有,敬禮!

 

[java] view plain copy
  1. public class HelloA {  
  2.     public static void main(String[] args) {  
  3.      new B().print();  
  4.     }  
  5. }  

 

[java] view plain copy
  1. class B extends A{  
  2.     private String s = "B" ;  
  3.     public void print() {  
  4.         super.print();  
  5.     }  
  6.     public String test(){  
  7.         return "test_B";  
  8.     }  
  9. }  

 

[java] view plain copy
  1. class A {  
  2.     private String s = "A" ;  
  3.     public void print() {  
  4.         System.out.println(this.s);  
  5.         System.out.println( this.test());  
  6.     }  
  7.     public String test() {  
  8.         return "test_A";  
  9.     }  
  10. }  


打印結果為:

   A
test_B

 

   1,在B中調用A類的print方法,在A中 用this調用s屬性和test方法,此時,this是 A對象,但是打印出了A中的屬性,調用了 B 類的方法, 說明方法可以重寫,屬性不能重寫

   2,如果把 A類的test方法改為private,則會調用A類的 test方法,原因是因為 B類中的test方法不是重寫的A類的test方法,可以說是一個新的方法,因為A類的test方法是私有的


免責聲明!

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



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