【发布时间】:2014-07-16 19:43:12
【问题描述】:
我试图弄清楚如何在任何子类中访问/使用抽象类的字段/方法,我在网络上遇到了这个示例。
abstract class Instrument {
protected String name;
abstract public void play();
}
abstract class StringedInstrument extends Instrument {
protected int numberOfStrings;
}
具体示例子类为
public class ElectricGuitar extends StringedInstrument {
public ElectricGuitar() {
super();
this.name = "Guitar";
this.numberOfStrings = 6;
}
public ElectricGuitar(int numberOfStrings) {
super();
this.name = "Guitar";
this.numberOfStrings = numberOfStrings;
}
@Override
public void play() {
System.out.println("An electric " + numberOfStrings + "-string " + name
+ " is rocking!");
}
}
我有 5 个与此相关的问题 - 很抱歉问了多个问题,但它们高度相关。
- 是否需要调用 super() 或者是否有效?抽象超类中没有给出构造函数
- 如果抽象类不能被实例化,它甚至可以有一个构造函数吗?
- 对于this.name,本例中是否需要关键字“this”?
- play() 在这里覆盖了什么?在抽象类中指定抽象方法时,不只是告诉编译器该方法必须由任何子类指定吗?
- 如果 Instrument 类、StringedInstrument 类和 ElectricGuitar 类都指定了名为“name”的字段,并且每个字段都有指定的构造函数(如果允许),那么如何在 ElectricGuitar 类定义中访问每个名称或构造函数。
【问题讨论】:
标签: java inheritance abstract-class