覆盖超类非抽象方法。访问超类中的私有属性(?)

时间:2013-08-29 06:11:53

标签: java inheritance superclass override

与问题相关的任务部分: “你的任务是完成程序。...另外你应该编写Drill类,它也派生自Tool类.Drill类有两个属性:model和drill的最大rpm。两个类都必须实现使用的printInfo方法打印工具信息,如示例打印所示。“

所以,我需要得到价格(1.75)m权重(175),模型“Black& Decker A”和rpm(1350)到从类Drill创建的两个钻孔对象,这是超类的子类工具。但是,权重和价格是超类中的私有属性,所以我的子类不能使用它们。当然,我可以毫无困难地使用和打印模型和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

到目前为止,我只是设法让模型和革命速度正确。

2 个答案:

答案 0 :(得分:3)

没有迹象表明您需要覆盖 ReturnWeightReturnPrice(这些是非常非常规方法在Java中的名称;通常他们是是getWeightgetPrice)。您只需要从printInfo方法调用现有的实现。目前尚不清楚您是自己编写Tool课程还是已经为您提供了课程 - 如果它是作业的一部分,那么我会关注命名方面,说实话。如果您自己编写,那么可能您可以自己重命名这些方法。

此外,您的子类中不应包含heightweight个字段 - 重点是超类已经拥有该信息。

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

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

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

此外,我建议您将modelrpm字段设为私有 - 并且最好在两个类final中创建所有字段。 (不可变类型更易于推理。)

答案 1 :(得分:2)

考虑到你只允许改变Drill:

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); 
      }
    }