与问题相关的任务部分: “你的任务是完成程序。...另外你应该编写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
到目前为止,我只是设法让模型和革命速度正确。
答案 0 :(得分:3)
没有迹象表明您需要覆盖 ReturnWeight
和ReturnPrice
(这些是非常非常规方法在Java中的名称;通常他们是是getWeight
和getPrice
)。您只需要从printInfo
方法调用现有的实现。目前尚不清楚您是自己编写Tool
课程还是已经为您提供了课程 - 如果它是作业的一部分,那么我会关注命名方面,说实话。如果您自己编写,那么可能您可以自己重命名这些方法。
此外,您的子类中不应包含height
和weight
个字段 - 重点是超类已经拥有该信息。
您还应该重新访问构造函数:
Drill (double y, int u, String i, int j)
您需要将y
和u
的值传递给超类构造函数,假设它们分别是weight
和price
。您的下一步应该是重命名所有参数,以便它们有意义。 (同样,应重命名Tool
类构造函数中的参数。)
此外,我建议您将model
和rpm
字段设为私有 - 并且最好在两个类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);
}
}