为什么下面的程序不能正常工作? 如果我们将此关键字作为参数,则代替下面的代码中的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();
}
}
答案 0 :(得分:4)
您的想法有误。 this 引用一个真实的对象,因此您可以将其传递给允许相应类实例的任何方法。
但是没有单独的 super 对象! super 只是一种帮助程序机制,该机制使您可以访问超类的方法或字段(并且仅在 派生类中有效)。它并非旨在提供真实的对象参照!
并注意:从概念上讲,这也是没有意义的。由于多态性,在查看子类时,您无法真正区分超类属性。
这真的很简单:您通过 this ,没有别的。如果您的代码不起作用,那么那将是设计错误的征兆!
答案 1 :(得分:0)
欢迎使用StackOverflow。
您的方法test
接收到一个Car
的实例,而关键字super
则用于通过 through 子类调用父方法。 this
关键字返回该类的实例。
您要实现的是调用super()
构造函数,以将Car的实例传递给方法,但是Java指出super()
调用只能在构造函数类中使用一次作为第一个语句,以确保该类将直接从其父类或Object类继承。如果您未声明,则Java会为您隐式地做到这一点。