【发布时间】:2016-09-07 14:10:26
【问题描述】:
这是一个有效的抽象类吗?
我知道抽象类不能被实例化,所以我对实例变量language和构造函数Programmer持怀疑态度。它还实现了一个未声明为default 的writeCode 方法。如果我没记错的话,可以在抽象类中实现的唯一方法是那些具有默认实现的方法。
public abstract class Programmer {
private String language;
public Programmer (String language) {
this.language = language;
}
public void writeCode() {
System.out.println("Written in " + language);
}
}
如果它是一个有效的抽象类,有人可以解释为什么它包含构造函数吗?
另外,更广泛地说,抽象类可以有实例变量吗?如果是这样,为什么?这似乎与不能实例化抽象类的想法背道而驰吗?
最后,如果有人使用
writeCode方法,我会很高兴。为什么在没有default修饰符的情况下实现它?
谢谢!
【问题讨论】:
-
是的!子类需要在他们的构造函数中第一次调用
super(languaje);。 -
你似乎混淆了
interfaces和abstract classes -
任何类都可以声明为
abstract(可能没有意义,但绝对合法)。 -
你可能应该研究一下
default修饰符到底是什么。 -
您应该真正定义“有效”的含义以获得更好的答案。因为在一个非常基本的层面上,你可以说它是否编译,它是有效的。并且你可以通过简单的编译来检查它是否编译。
标签: java constructor abstract-class default abstract