覆盖范例的问题

时间:2014-05-01 15:53:25

标签: java extends override

所以我有这3个课程,在某个地方找到它们,它说它会让我明白什么是压倒一切。事情是,当我运行这个时,我得到Car@697eb767Ferrari@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@697eb767Ferrari@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程序的另一个例子,这将让我更好地理解覆盖。

3 个答案:

答案 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的问题 - 输出ab对象时的输出类似于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.");
}
}

希望它可以帮到你