public class class1 {
public void xxx(){
super.getXXX();
super().getXXX();
}
}
回答
兩個在子類中被用作的方式來調用或引用其超類。
super()
是您在構造函數內部或在重寫的方法內部調用超類的構造函數或超類的重寫方法所調用的方法。 super()調用也可以在這些情況下使用參數。
注意,因爲所有的類都默認至少從Object繼承,你可以隨時調用super()構造函數中(必須是在構造函數中的第一條語句雖然)。這個super()調用事實上通常由編譯器默認插入到你的無參數構造函數中。
這可能很麻煩但如果超類沒有無參數的構造函數,雖然,在這種情況下,你的超()調用沒有相應的ARGS將失敗。無參數構造函數通常是默認生成的,所以您不必擔心它,但是如果您已經使用參數明確定義了另一個構造函數,它將不會自動生成,因此您可能需要顯式定義一個你自己。
super
而不在另一方面括號是簡單地超類本身的引用,像任何其他變量。它可以用來調用該類中的任何可訪問的方法,或引用該類的任何可訪問字段,就像您使用其他任何引用一樣。例如:super.doSomething()
或super.x
每個類都在java中有一個超類。當您使用super
關鍵字時,您指的是超類,並且super
上的點運算符將允許您訪問超類的屬性和方法。
super()
是超類的構造函數。當您在子類中重寫構造函數時,必須先調用super()
,然後才能執行自己的邏輯,如果不這樣做,編譯器將代表您將向無參數構造函數插入一個調用。 (有時候,沒有一個,代碼編譯失敗)
在Java中,調用構造函數爲您提供了一個類的實例,當您執行super()
時,它不是同一件事,因爲在那裏並不是在您執行super()
時創建的超類的單獨實例。因此,雖然MyClass().doSomething()
是完全有效的呼叫,但super().doSomethingElse()
不是。
我已經投票贊成這是一個正確的答案。我不確定是誰或者爲什麼有人投了票。 – 2013-04-24 02:27:54
*「...你必須打電話給super()...」 - - 是和不是。必須調用超類的構造函數,但如果超類中有明確或隱式的無參數構造函數,它*可能是隱式的。 – 2013-04-24 02:59:40
@StephenC照顧。感謝您指出。 – 2013-04-24 03:05:17
- 1. Super Web Socket和Nugget有什麼不同?
- 2. super(Application.class)是什麼意思;在Java中?
- 3. 爲什麼需要[super loadView]或[super viewDidLoad]?
- 4. 在Java類中具有super()和不具有super()函數調用的構造函數之間有什麼區別
- 5. Java中的super()。這是什麼意思?
- 6. super()和Parent類名有什麼區別?
- 7. Python super()參數:爲什麼不是super(obj)?
- 8. Java ASM4:super(ASM4);?
- 9. Java super()繼承
- 10. 爲什麼在Objective-C中,我們使用self = [super init]而不是[super init]?
- 11. 使用super();在Java中
- 12. java和super關鍵字有什麼區別?
- 13. 什麼是[super awakeFromNib];用於?
- 14. 爲什麼「[self class] == [super class]」?
- 15. super()方法做什麼?
- 16. 在Java中使用this和super
- 17. NSInvocation和super
- 18. Backbone,TypeScript和super
- 19. 爲什麼System.out.println(super)不允許?
- 20. 爲什麼python super不接受實例?
- 21. 爲什麼super不需要分配?
- 22. java super for字段
- 23. Java通用類型中的「super」關鍵字有什麼問題
- 24. Java:爲什麼有人會在默認情況下編寫super()?
- 25. `super(argument)`中的`argument`做了什麼?
- 26. Objective-C中的SUPER是什麼 - iOS
- 27. 這是爲什麼在python super().__ init __(** kwargs)
- 28. 爲什麼不能在構造函數中同時使用this()和super()?
- 29. 在Java中,有沒有什麼方法可以在同一個構造函數中調用this()和super()?
- 30. 爲什麼我們在java中使用「?super T」?
一個是超,另一種是超級騙子。認真但是,這是編譯?爲什麼不在你的問題中發佈* real *代碼?代碼很簡單,但實際上編譯和演示你問的是什麼? – 2013-04-24 02:20:34
@HovercraftFullOfEels在這種情況下,你可能會成爲這個騙子......? http://en.wiktionary.org/wiki/duper「一個欺騙另一個人的人」 – gutch 2013-04-24 02:21:56
@gutch:你可能是對的。 – 2013-04-24 02:23:28