无法将超级关键字作为参数传递给Java中的方法

时间:2019-03-10 05:06:14

标签: 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();
  }
} 

2 个答案:

答案 0 :(得分:4)

您的想法有误。 this 引用一个真实的对象,因此您可以将其传递给允许相应类实例的任何方法。

但是没有单独的 super 对象! super 只是一种帮助程序机制,该机制使您可以访问超类的方法或字段(并且仅在 派生类中有效)。它并非旨在提供真实的对象参照!

并注意:从概念上讲,这也是没有意义的。由于多态性,在查看子类时,您无法真正区分超类属性。

这真的很简单:您通过 this ,没有别的。如果您的代码不起作用,那么那将是设计错误的征兆!

答案 1 :(得分:0)

欢迎使用StackOverflow。

您的方法test接收到一个Car的实例,而关键字super则用于通过 through 子类调用父方法。 this关键字返回该类的实例。

您要实现的是调用super()构造函数,以将Car的实例传递给方法,但是Java指出super()调用只能在构造函数类中使用一次作为第一个语句,以确保该类将直接从其父类或Object类继承。如果您未声明,则Java会为您隐式地做到这一点。