所以我有这3个课程,在某个地方找到它们,它说它会让我明白什么是压倒一切。事情是,当我运行这个时,我得到Car@697eb767
和Ferrari@7e3b014c
。此外,我对该程序进行了一些更改,在该网站上我看到程序是这样的:
public class Car {
public static void main (String [] args) {
Car a = new Car();
Car b = new Ferrari(); //Car ref, but a Ferrari object
a.start(); // Runs the Car version of start()
b.start(); // Runs the Ferrari version of start()
}
}
class Car {
public void start() {
System.out.println("This is a Generic start to any Car");
}
}
class Ferrari extends Car {
public void start() {
System.out.println("Lets start the Ferrari and go out for a cool Party.");
}
}
但在这种状态下,它并没有运行。那么我该怎么做才能让程序真正向我展示这些消息,而不是Car@697eb767
和Ferrari@7e3b014
这些消息?
public class Car {
public void start() {
System.out.println("This is a Generic start to any Car");
}
}
public class Ferrari extends Car {
public void start() {
System.out.println("Lets start the Ferrari and go out for a cool Party.");
}
}
public class Main {
public static void main (String [] args) {
Car a = new Car();
Car b = new Ferrari(); //Car ref, but a Ferrari object
System.out.println(a);
System.out.println(b);
}
}
另外,我真的很感激java程序的另一个例子,这将让我更好地理解覆盖。
答案 0 :(得分:3)
重写方法是指获取超类的方法并在子类中修改它。现在,您的Car方法扩展了Object类。你得到Car @ 697eb767的原因是你没有覆盖你车里对象的toString方法。
在Car类中,使用Override标记覆盖Object类toString方法并创建toString方法。在该方法中,定义您希望汽车对象返回的内容。
@Override
public String toString(){
String text = ""; <-------define what you want to return here
return text;
}
同样,如果你想要从Car对象获得不同的toString输出,那么你需要对Ferrari类这样做,因为法拉利扩展了Car。
答案 1 :(得分:1)
如果您在第一个示例中调用两个类的start()
个方法,则输出将为:
这是任何Car的通用开始
让我们开始法拉利,然后去参加一个很酷的派对。
调用b.start()
将使用Ferrari
方法,因为您将其创建为Ferrari
对象,无论您是将对象分配给泛型类声明的变量还是具体的一。
Car@697eb767
的问题 - 输出a
和b
对象时的输出类似于toString()
方法的默认实现。为了避免这种情况,你需要像这样覆盖它:
@Override
public String toString() {
return "Hi, I'm Ferrari"; //or "I'm a car"
}
为了进一步阅读以了解继承,我建议您阅读以下内容:
http://en.wikipedia.org/wiki/Inheritance_%28object-oriented_programming%29
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 2 :(得分:-1)
这就是我所做的,我分成了两个文件并且正在为我工作
Car.java
public class Car {
public static void main (String [] args) {
Car a = new Car();
Car b = new Ferrari(); //Car ref, but a Ferrari object
a.start(); // Runs the Car version of start()
b.start(); // Runs the Ferrari version of start()
}
public void start() {
System.out.println("This is a Generic start to any Car");
}
}
Ferrari.java
public class Ferrari extends Car {
@Override
public void start() {
System.out.println("Lets start the Ferrari and go out for a cool Party.");
}
}
希望它可以帮到你