当抽象类扩展具体类时,继承的成员是否变为抽象?

时间:2014-03-12 18:50:54

标签: java inheritance

我正准备参加我的Java 7程序员考试并提出一个问题:

当抽象类扩展一个具体类时,具体类中的继承成员是否在抽象类中变为抽象?

到目前为止,我正在研究的书中找不到明确的答案;此外,谷歌在不告诉我需要知道的情况下让我圈起来。

提前致谢

2 个答案:

答案 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)

只有覆盖它们并声明抽象(方法成员)时,具体类中的继承成员才不会变成抽象。