簡體   English   中英

無法將超級關鍵字作為參數傳遞給Java中的方法

[英]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.

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