[英]Cannot pass super keyword as an argument to method in java
為什么下面的程序不能正常工作? 如果我們將此關鍵字作為參數,則代替下面的代碼中的super,它將正常工作,這兩個代碼之間有什么區別。 提前致謝
class Vehicle
{
int maxSpeed = 120;
}
/* subclass Car extending vehicle */
class Car extends Vehicle
{
int maxSpeed = 180;
void display()
{
test(super);
/* print maxSpeed of base class (vehicle) */
// System.out.println("Maximum Speed: " + super.maxSpeed);
}
public void test(Vehicle obj)
{
System.out.println("Maximum Speed: " + obj.maxSpeed);
}
}
/* Driver program to test */
class Test
{
public static void main(String[] args)
{
Car small = new Car();
small.display();
}
}
你這有一個誤解。 這是針對真實對象的,因此您可以將其傳遞給允許相應類實例的任何方法。
但是沒有單獨的超級對象! super只是一種幫助程序機制,該機制允許您訪問super類的方法或字段(並且僅在派生類中有效)。 它並非旨在提供真實的對象參照!
請注意:從概念上講,這也是沒有意義的。 由於多態性,在查看子類時,您無法真正區分超類屬性。
這很簡單:您通過此操作 ,僅此而已。 如果您的代碼不起作用,那么那將是設計錯誤的征兆!
歡迎使用StackOverflow。
您的方法test
接收到Car
的實例,關鍵字super
通過子類用於調用父方法。 this
關鍵字返回該類的實例。
您要實現的目標是調用super()
構造函數以將Car的實例傳遞給該方法,但是java聲明super()
調用只能在構造函數類中作為第一條語句使用一次,以確保該類將直接從其父類或Object類繼承。 如果您未聲明,則Java會為您隱式執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.