2

我在这个例子中说明了我的问题

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
}

class Mercedes extends Car {
    public void start(){
        System.out.println("Mercedes Started!!!");
    }
}

现在,在我的主程序中,我写

Mercedes m = new Mercedes();
m.start();

它打印:梅赛德斯开始了!!!

如何使用相同的对象调用类的start()方法,Car以便输出可以

车开!!!.

编辑

其实这是在我参加的一次采访中被问到的。我给出了超级关键字的答案。但面试官否认了。他说他会给我一个提示并说虚拟功能。我不知道如何使用该提示。

4

6 回答 6

3

您的方法应该像调用超级实现一样。

public void start(){
    super.start();
    System.out.println("Mercedes Started!!!");
}

或者它没有。在这种情况下,您说您已经替换了父级的实现。

虽然这不是一个好主意,但您可以通过添加一个方法来解决这个问题。

public void startCar(){
    super.start();
}
于 2012-09-15T15:10:14.413 回答
1

该方法已在子类中被覆盖,因此它有效地替换了超类中的方法。

子类本身可以调用超类中的方法:

class Mercedes extends Car {
  public void startFromCar() {
    super.start();
  }
  public void start(){
    System.out.println("Mercedes Started!!!");
  }
}
于 2012-09-15T15:07:37.937 回答
1

关键词super

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
}
class Mercedes extends Car {
    public void start(){
        super.start();
    }
}

编辑:

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
}
class Mercedes extends Car {
}

现在如果你打电话new Mercedes().start();,“汽车启动!!!” 被打印。

于 2012-09-15T15:09:18.127 回答
1

您已经在子类中覆盖了父类的方法。要访问此类方法super,使用关键字。

如此变化

class Mercedes extends Car {
public void start(){
    System.out.println("Mercedes Started!!!");
}

}

class Mercedes extends Car {
public void start(){
    super.start();
    System.out.println("Mercedes Started!!!");
}

}

将打印

Car Started!!!
Mercedes Started!!!

或者如果您想单独访问而不更改给定函数,请尝试在Mercedes类中定义一个新方法。

public void startCar(){
    super.start();
}

调用此函数将达到您的目的。

于 2012-09-15T15:18:13.557 回答
1

您必须在类中添加另一个方法来Mercedes调用超类的start方法:

public void superStart() { super.start(); }

super关键字允许您访问要继承的类(超类)。更多关于它的信息

于 2012-09-15T15:12:12.680 回答
0

还有另一种选择

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
 }
 Class Mercedes extends Car {
    //nothing here
 }

然后打电话

Mercedes m = new Mercedes();
m.start();

将打印:

车子启动了!!!

如果你想要一个类似于梅赛德斯的对象打印其他东西而不是汽车启动!!!它应该看起来像这样

    class AlfaRomeo extends Car {.
        @override
        public void start(){
        System.out.println("Car Started!!!");  
        System.out.println("Its AlfaRomeo!!!");
        }
    }

@override 告诉 java 使用子方法而不是父方法。

AlfaRomeo a = new AlfaRomeo();
 a.start();

所以打印将是:

车子启动了!!!

它的阿尔法罗密欧!!!

于 2012-09-15T15:39:12.887 回答