具有Java的继承和多态问题 [英] Having inheritance and polymorphism issues with Java

查看:126
本文介绍了具有Java的继承和多态问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我还需要一个重写的calclatefees方法来计算逾期电影的滞纳金。

I also need a overridden calclatefees method to calculate late fees for overdue movies.

 public class Action extends Movie {

    protected double latecost;
    protected double latefees;

    public Action (String title, String rating, int id, int rentTime, 
            double latecost, double latefees ) {

        super(title, rating, id, rentTime);
        this.title = title;
        this.rating= rating; 
        this.id = id; 
        this.rentTime=  8;
        this.latecost =  2;

        System.out.println( "Overridden " + title + rating + " " + id + " " 
                + latecost + " " + latefees);
    }
    public double calclatefees (double latecost) {

        if (rentTime > 3)
            latefees = ((rentTime - 3) * latecost);
        return latefees;}

    @Override
   public String toString () {
    String x = "Movie: " + title + " is rated "  + rating + "\nMovie ID           number:" 
            + id + " late fees are $" + latefees;
    return x;
    }
   }    


推荐答案

你需要使用this关键字。我相信如果你没有,并且你在构造函数中使用相同的名称,它不会分配任何东西。您告诉参数中的标题等于您分配的内容,在下面的示例中,未覆盖。

You need to be using the this keyword. I believe that if you do not and you are using the same names in the constructor, it isn't assigning anything. You are telling the title within the parameter to equal whatever you are assigning it, which in the example below is " not overridden ".

例如

public Movie(String title, String racing, int id, int rentTime){
   this.title = " not overridden ";
   // probably should be something like this.title = title after debugging.
   //etc...
}

this关键字指的是当前对象的数据成员,因此this.title将是Movie的标题,而不是参数成员标题。

The this keyword refers to the current object's data members, so this.title would be the Movie's title, not the parameter member title.

您还需要使用上面的set方法执行此操作。

You will need to do this with your set methods above also.

public void rating (String rating) {this.rating = rating;}

编辑:尝试使用构造函数

edit: try this for constructor

public Movie(String title, String rating, int id, int rentTime){
    this.title = " not overridden ";
    this.rating = " NR ";
    this.id = 0;
    this.rentTime = 0;
    System.out.println( " overloaded -" + title + rating + id + rentTime);
 }

看到输出后,如果要显示实际值,传递到其他子类,您必须将其更改为:

after you see the output, if you want to show the actual values you are passing into the other child classes, you have to change it to this:

public Movie(String title, String rating, int id, int rentTime){
    this.title = title;
    this.rating = rating;
    this.id = id;
    this.rentTime = rentTime;
    System.out.println( " overloaded -" + title + rating + id + rentTime);
 }

这篇关于具有Java的继承和多态问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆