1. 程式人生 > >java this 子類調父類,父類再呼叫子類已覆蓋的方法及屬性(又一次理解)

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私有的型別,子類不能擁有,敬禮!

public class HelloA {
    public static void main(String[] args) {
     new B().print();
    }
}

class B extends A{
	private String s = "B" ;
    public void print() {
    	super.print();
    }
    public String test(){
    	return "test_B";
    }
}

class A {
	private String s = "A" ;
    public void print() {
    	System.out.println(this.s);
    	System.out.println(	this.test());
    }
    public String test() {
		return "test_A";
	}
}

列印結果為:

   A
test_B

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

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

相關推薦

java this 調調覆蓋方法屬性(理解)

views args pop word per ews nds 如果 ext 之前一直以為 this關鍵字 是指調用者對象,但是這次才真正理解,this代表當前對象,但是指向調用者對象,其實就是多態的用法,如下所示:B 繼承了 A,在B 中調用A類的方法,在A 中用this

java this 調呼叫覆蓋方法屬性(理解)

之前一直以為 this關鍵字 是指呼叫者物件,但是這次才真正理解,this代表當前物件,但是指向呼叫者物件,其實就是多型的用法,如下所示:B 繼承了 A,在B 中呼叫A類的方法,在A 中用this 訪問成員變數和方法,此時,如果用this訪問成員變數,如下,this.s ,

java工具-接受請求引數並利用反射呼叫方法

public String a(HttpServletRequest request,HttpServletResponse response) throws JSONException, IOException, ParseException, IllegalAccessException, Ille

layer通過頁面調頁面的方法屬性

ade als ont clas java title class 提交 orm 引言 在使用layer.js的過程中,需要通過layer.open()以iframe的形式打開特定的頁面,同時需要用layer的按鈕對打開的頁面進行提交及重置操作,但是苦於不知如何在父頁面調用

函式呼叫函式函式呼叫方法函式重寫了那麼最後函式呼叫的是自己的方法還是函式的方法

Q:子類呼叫父類的方法,父類中某個方法所呼叫的方法,子類也重寫了,那麼最後父類中的方法呼叫的是自己的方法,還是子類的方法。 A:呼叫的是子類的方法。     看程式碼: public class Parent { public void used

關於實現實現介面之後eclipse沒有紅線提示實現去實現介面中的方法的問題

實現類AccessTokenListener實現了介面ServletContextListener,但是eclipse卻沒有紅線提示實現類AccessTokenListener去實現介面的方法。 import javax.servlet.ServletContextListener; publ

python——k-means聚(餘弦距離用輪廓係數確定聚係數K)

    用scikit-learn進行k-means聚類,預設使用歐式距離,為了用餘弦距離作為度量,找了一個在生物資訊學裡比較常用的庫:Biopython。Biopython為k-means聚類提供了各種距離函式,包括餘弦距離、皮爾遜相似度量、歐式距離等。    另外,為了確

java的構造方法可以直接呼叫該類中有的方法

例項程式碼如下: 其中構造方法中的呼叫替換掉原註釋的部分。 package test; /**  * @author : suyuyuan * @date :2016年6月22日 下午2:46:43  * @version 1.0  */     class People{

jquery獲取元素的值獲取當前物件的物件元素的元素

當點選 <a href="#" style="cursor: hand" onclick="more(this);" class="fright mr15">更多</a>時, 在js的函式中想要獲取隱藏域的值 <input type="hidden" value="00070

Java 非同步同時寫多個檔案寫完之後通知執行緒

思路:         是主執行緒和多個寫檔案執行緒之間同步,每寫完一個檔案計數加1,如果計數值等於當前寫檔案個數的時候,表示檔案已經全部寫完。此時通過條件變數通知在該條件變數等待的主執行緒。此時主執行緒被喚醒,可以在所有檔案被寫完的條件下做一些動作 程式碼: pack

基本數據型轉StringString轉基本數據

數據類型 static 類型 ble 轉化 tostring 字符串 -- parseint 基本數據類型 --> 字符串 1、基本數據類型+"" String s = 5 + ""; 2、使用包裝類的靜態方法toString(

面試官:談談載入器吧你有沒有看過載入器的原始碼

一、類載入 1.1、在java程式碼中,型別的載入,連線,初始化過程都是在程式執行期間完成的。 圖示: 1.2、型別的載入——這裡的型別是指的什麼? 答:型別就是指的我們Java原始碼通過編譯後的class檔案。 1.3、型別的來源有哪些? (1)本地磁碟 (2)網路下載,class檔案 (3)war,ja

的學習筆記(5)——靜態方法方法、例項方法屬性方法的區別

  python面試題:靜態方法、類方法、例項方法及屬性方法的區別? 1、靜態方法:處理與這個類的邏輯關聯,該方法不可訪問例項屬性或類屬性。可以通過staticmethod裝飾器實現 2、類方法:與本類相關的,方法屬於類的,只能訪問類屬性,可以通過classmethod裝飾器實現。 3

java通過cxf實現webservice服務端客戶端接收不到響應資訊處理方法

最近在做專案時與客戶進行webservice聯調,響應成功後返回1,服務端正常返回,客戶端表示沒有收到,針對其中的問題分析和處理方法。 1.判斷是否是服務寫的有問題,寫了個測試方式試了下,發現服務端返回沒有問題 String xmlStr = "<?xml vers

python3_scrapy包Field方法屬性剖析、字典(dict)方法屬性剖析

1.Field類簡介①Field物件指明瞭每個欄位的元資料(任何元資料),Field物件接受的值沒有任何限制②設定Field物件的主要目就是在一個地方定義好所有的元資料③注意,宣告item的Field物件,並沒有被賦值成class屬性。(可通過item.fields進行訪問)

maven自己主動編譯解決你每次代碼改動須要編譯的繁瑣

mvn clean span ng- ips 每次 servlet trac 問題 文件夾 maven結構的項目,我們在每次改動代碼後都會須要手動編譯,以下命令能夠解決此問題。僅僅要代碼改動。會自己主動幫你編譯。 進入項目文件夾運行:mvn -U eclipse:

C語言基礎下的C++入門---極其絕望的入門不過這次一定是最後入門!!!!!

小程式的入門(一)~~!!  #include<iostream> using namespace std;//名稱空間 相當於 #include<iostream.h> -->> C92版本 int addArray(int *addArr

大資料環境下我們被賣了

大資料,人工智慧是當下網際網路最熱門的話題。 拋開大資料的人工智慧都是耍流氓,人工智慧需要大資料作為基礎支援。 大資料是1980年,著名未來學家阿爾文·托夫勒便在《第三次浪潮》一書中,將大資料熱情地讚頌為“第三次浪潮的華彩樂章”。大約從2009年開始,“大資料”成為網際網路資訊科技行

大數據環境下我們被賣了

需要 社會 標簽 行為 移動互 共享 基於 網信 海量 大數據,人工智能是當下互聯網最熱門的話題。 拋開大數據的人工智能都是耍流氓,人工智能需要大數據作為基礎支持。 大數據是1980年,著名未來學家阿爾文·托夫勒便在《第三次浪潮》一書中,將大數據熱

c語言多檔案程式設計即main檔案呼叫其他.c檔案的方法

c語言多檔案程式設計,即main檔案呼叫其他.c檔案的方法。 兩種方法的區別就是,gcc編譯時,是否加b.c檔案,不加的話,就在a.c檔案裡面,加#include "b.c" 至於extern 那一句,是否新增,編譯都是可以通過的,只是填加上去,大家都知道了,這個函式在其他地方定義了,這個地方只是呼