0

作业中与问题相关的部分:“您的任务是完成程序。...此外,您应该编写同样从 Tool 类派生的 Drill 类。Drill 类有两个属性:型号和钻头的最大转速。两者都有类必须实现用于打印工具信息的 printInfo 方法,如示例 print 中所示。”

所以,我需要为从超类 Tool 的子类 Drill 类创建的两个钻孔对象获取价格 (1.75)m 重量 (175)、型号 "Black&Decker A" 和 rpm (1350)。但是,重量和价格是超类中的私有属性,所以我的子类不能使用它们。当然,我可以毫无困难地使用和打印模型和 rpm 值。

谁能在这里指出我正确的方向?我不是要你做我的任务。我已经被困了16个小时左右。我尝试覆盖 Tool 类的返回方法无济于事。我只能在这个作业中编辑子类 Drill。

这是相关代码的截断版本以及到目前为止我为 Drill 类编写的内容:(“...”指的是代码的截断)

测试班

public class TestClass {
  public static void main(String args[]) {
    ...

    Tool drill1, drill2    

    drill1 = new Drill(1.75, 175, "Black&Decker A", 1350);

    drill2 = new Drill(2, 250, "Black&Decker B", 3000);
    ...
    ((Drill)drill1).printInfo();

    System.out.println();

    ((Drill)drill2).printInfo();
    ...
  }
}

工具类

abstract class Tool {
  private double weight;     // These guys
  private int price;         // Causing all the trouble here

  public Tool(double p, int h) {

    weight = p;
    price = h; 
  }

  public double ReturnWeight() {

    return weight;
  }


  public int ReturnPrice() {

    return price;
  }

  public abstract void printInfo();
} 

钻级

class Drill extends Tool {

  double weight;
  int price;        
  String model;
  int rpm;      


  Drill (double y, int u, String i, int j) {
    super(weight,price);    // Have to do this because of the Tool class

    weight = y          
    price = u;
    model = i;
    rpm = j;
  }

  //my pitiful attempts at overriding. Not even sure what to do here ***

  public double ReturnWeight() {

    return weight;
  }

  public int ReturnPrice() {

    return price;
  }

  public void printInfo() {
    System.out.println("Weight: " + weight);
    System.out.println("Price: " + price);
    System.out.println("Model: " + model);
    System.out.println("Revolution speed: " + rpm); 
  }
}

示例打印应如下所示:

Weight: 1.75 kg

Price: 175 euros

Model: Black&Decker A

Revolution speed: 1350


Weight: 2.0 kg

Price: 250 euros

Model: Black&Decker B

Revolution speed: 3000

到目前为止,我只设法让模型和旋转速度正确。

4

2 回答 2

3

没有迹象表明您需要覆盖 ReturnWeightand ReturnPrice(它们是Java中非常规的方法名称;通常它们是getWeightand getPrice)。您只需要从您的方法中调用现有的实现。printInfo目前尚不清楚您是Tool自己编写的课程还是为您提供的课程 - 如果它是作业的一部分,那么老实说,我会担心命名。如果您自己编写,那么大概您可以自己重命名这些方法。

此外,您的子类中不应该有heightandweight字段 - 关键是超类已经拥有该信息。

您还应该重新访问您的构造函数:

Drill (double y, int u, String i, int j)

您需要将yand的值传递u给超类构造函数,假设它们分别是weightand price。您的下一步应该是重命名所有参数,使它们有意义。(同样,Tool类构造函数中的参数也应该重命名。)

此外,我建议您将modelandrpm字段设为私有 - 理想情况下将两个类中的所有字段设为私有final。(不可变类型更容易推理。)

于 2013-08-29T06:14:28.153 回答
2

考虑到您只允许更改钻头:

class Drill extends Tool {
    String model;
    int rpm;    

      Drill (double weight, int price, String model, int rpm) {
        super(weight,price); 

        this.model = model;
        this.rpm = rpm;
      }

      public void printInfo() {
        System.out.println("Weight: " + ReturnWeight());
        System.out.println("Price: " + ReturnPrice());
        System.out.println("Model: " + model);
        System.out.println("Revolution speed: " + rpm); 
      }
    }
于 2013-08-29T06:35:27.573 回答