2014-03-12 230 views
0

我準備好參加我的Java 7程序員考試並且有一個問題:當抽象類擴展具體類時,繼承的成員是抽象的嗎?

當一個抽象類擴展一個具體類時,從具體類繼承成員然後在抽象類中變成抽象嗎?

到目前爲止,我在我正在學習的書中找不到明確的答案;此外,谷歌正在旋轉我的圈子,而不告訴我我需要知道什麼。

在此先感謝

+1

我假設你正在學習Java 7考試,你會在你面前有一個編譯器。爲什麼不試試看看? –

回答

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將不會編譯。

+0

感謝所有的細節 - 它真的幫助。 – eggshell

2

沒有繼承具體的類成員不會成爲抽象的,只有當你忽略他們,並聲明抽象的(方法成員)。