我有一个抽象类NoiseMaker,我想从Test类访问一个抽象方法makeNoise。我需要将som代码放在doSomething方法中。我只是无法弄清楚要写什么。我想要输出 “尖叫出来:ROAR”
public interface MakeNoiser{
public void doSomething();
}
public class Test implements MakeNoiser {
public Test() {}
public void setNoiseMaker(NoiceMaker nm) {
nm.makeNoise();
}
@Override
public void doSomething() {
//What to write in this method to print out "ROAR"?
}
public static void main(String[] args) {
Test t = new Test();
t.setNoiseMaker(new Scream("ROAR"));
t.doSomething();
}
}
public abstract class NoiseMaker {
private String noiseName;
public NoiseMaker(String noiseName) {
this.noiseName= noiseName;
}
public abstract void makeNoise();
public String getNoiseName() {
return noiseName;
}
}
public class Scream extends NoiseMaker {
public Scream(String noiseName) {
super(noiseName);
}
@Override
public void makeNoise() {
System.out.println("Scream out load: ");
}
}
答案 0 :(得分:2)
你真的就在那里。你只是忘了在被覆盖的方法中打印出声音。
@Override
public void makeNoise() {
System.out.println("Scream out load: " + getNoiseName());
}
doSomething
与NoiseMaker
没有任何关系,所以如果你想做的就是打印出一些噪音,我不知道为什么你会要求这个功能。
我会将拼写错误作为您需要解决的真正问题(NoiceMaker
而不是NoiseMaker
),但在添加getNoiseName()
调用后,其余代码应该可以正常工作
答案 1 :(得分:1)
这是如何在java中使用抽象类。
public class Main {
public static void main(String[] args) {
Sounds s = new Sounds() {
@Override
public void lol() {
System.out.print("hi");
}
};
s.lol();
}
}
abstract class Sounds {
public abstract void lol();
}
答案 2 :(得分:1)
首先,我发现您的Test
课程存在问题。您实施setNoisemaker
,但未存储对该NoiseMaker
的引用(例如private NoiseMaker myNoiseMaker;
中有Test
)。因此,您以后无法访问NoiseMaker
(在本例中为Scream
),以便在其上调用makeNoise()
。
我会添加上面显示的myNoiseMaker字段,然后在setNoiseMaker()
中添加this.myNoiseMaker = nm;
。然后,您可以在myNoiseMaker.makeNoise();
中致电doSomething()
。
最后 - 要将“ROAR”附加到您的对帐单,您需要在+ getNoiseName()
的{{1}}方法中添加makeNoise()
<强> 修改 强>
重新阅读,我想你可能想在Scream
方法中附加“ROAR”。在这种情况下 - 我会这样做(所有其他代码保持不变):
doSomething()
答案 3 :(得分:0)
只是从抽象类继承并覆盖抽象方法。你不能调用抽象方法,必须重写它们。
public class Test extend NoiseMaker {
public void makeNoice() {
System.out.println('hallo');
}
}
不需要@Override
注释。没有它它会工作。