我正准备参加我的Java 7程序员考试并提出一个问题:
当抽象类扩展一个具体类时,具体类中的继承成员是否在抽象类中变为抽象?
到目前为止,我正在研究的书中找不到明确的答案;此外,谷歌在不告诉我需要知道的情况下让我圈起来。
提前致谢
答案 0 :(得分:3)
不,他们不会成为abstract
。如果是这种情况,则下面的代码将无法编译:
class Test {
public void hello() {
System.out.println("Hello");
}
}
abstract class AbstractTest extends Test { }
class ConcreteTest extends AbstractTest {
// Inherits the hello() method from AbstractTest,
// which in turn inherits it from Test.
}
但它编译得很好。如果hello()
方法变为abstract
,则ConcreteTest
必须为此提供实现。
但是,您可以在AbstractTest
方法中将该方法重新声明为abstract
,然后ConcreteTest
类必须为此实现。所以,在这段代码中:
class Test {
public void hello() {
System.out.println("Hello");
}
}
abstract class AbstractTest extends Test {
public abstract void hello();
}
class ConcreteTest extends AbstractTest {
}
ConcreteTest
无法编译。
答案 1 :(得分:2)
只有覆盖它们并声明抽象(方法成员)时,具体类中的继承成员才不会变成抽象。