簡體   English   中英

擴展JFrame-“ super”關鍵字如何工作?

[英]Extending JFrame - how does “super” keyword work?

我制作了一個擴展JFrame的類,並在我的類構造函數中設置了我可以使用的標題:

super("title");
setTitle("title");

或只是創建一個JFrame對象,即:

JFrame f = new JFrame("title);

編譯器如何與所有這些區別以得出相同的結論? 我知道super用於調用超類中的重寫方法,但是如何特別知道調用setTitle方法呢?

我的想法是super調用JFrame類的構造函數,並且只有一個構造函數帶有字符串參數,因此它基本上是在做: JFrame f = new JFrame("title);而沒有顯式創建對象。

這是真的? 如果不是,有人可以解釋super到底在做什么,為什么setTitle不需要對象引用?

干杯

  1. new JFrame( "title" )調用JFrame的構造函數。 它可能調用setTitle() (但可能不會調用),或者可能只是設置用於保存標題的內部變量。

  2. super.setTitle()只是一個方法調用。 如果您重寫了setTitle() ,它將忽略您的定義並在超類上調用相同的方法。 通常用於“鏈接”到超類的方法。

  3. super( "title" )只能被稱為構造函數的第一行。 這不是方法調用。 它調用超類中的特定構造函數,構造該對象,然后繼續構造函數代碼。 這就是所有構造函數的工作方式。 如果不指定構造函數,則將自動調用無參數構造函數( super() )。

如果查看框架對象,則調用super(JFrame)意味着您要將參數傳遞到JFrame中,因此JFrame jf = new JFrame("Title"); super("Title"); (假設超級類型是JFrame)

當您在父類中調用super("title")時,您告訴Java“實例化我的對象,首先在具有String參數的父類上調用構造函數”。 如果沒有顯式的超級調用,則將調用no-arg構造函數(與Object()構造函數一樣)。 事實證明,JFrame構造函數使用其參數調用setTitle

調用setTitle("title") ,這是隱含的,因此您可以在對象上調用方法。 如果尚未覆蓋它,則將調用超類實現。

具體如何知道調用setTitle方法?

單獨調用super()將調用超類構造函數。

當您調用setTitle() Java會查看該方法是否存在於當前類中。 如果沒有,它將查看父類。

如果您重寫了setTitle() ,則從子類中調用setTitle()將調用該類的方法。 如果調用super.setTitle() ,它將在超類中調用setTitle()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM