2011-10-05 161 views
3

我可以在java中抽象基類A中實現抽象方法嗎?在java中實現抽象方法/類

如果答案是肯定的,並且在基類A中存在一個實現的抽象方法,並且從A有一個派生類B(B不是抽象的)。 B是否仍然需要實現該基本抽象方法?

回答

7

如果我正確理解你的問題,是的。

public abstract class TopClass { 
    public abstract void methodA(); 
    public abstract void methodB(); 
} 

public abstract class ClassA extends TopClass { 
    @Override 
    public void methodA() { 
    // Implementation 
    } 
} 

public class ClassB extends ClassA { 
    @Override 
    public void methodB() { 
    // Implementation 
    } 
} 

在這個例子中,ClassB將被編譯。它將使用它自己的methodB()實現,以及ClassA的methodA()實現。如果需要,您也可以重寫ClassB中的methodA()。

+0

+1,雖然正確地說,我認爲答案應該是「Yes和No」考慮到OP居然問了兩個問題(你只回答了第一個用言語,但第二與代碼)。 – CPerkins

0

。抽象方法意味着由子類定義。有關更多信息,請參閱Abstract Methods and Classes。但是,如果需要,您可以在基類中定義一個方法並讓其子類覆蓋它。

0

是的,但它不能再抽象了。抽象意味着沒有實現。

你可以做的是:

interface I { 
    void meth(); 
} 

//and 

abstract class A implements I { 
    public void meth() { 
     //implementation 
    } 
} 

或者:

abstract class A { 

    public abstract void meth(); 
} 

//and 

abstract class B extends A { 
    public void meth() { 
    } 
} 

如果A已經實現,你可以在B改寫它(如果B是具體的),原因是b繼承了從A

+0

沒有實施基本方法? –

1

默認實現你可以有兩個抽象類,X和Y,其中Y延伸X.在這種情況下,它可能是有意義Y的實施X的抽象方法,同時仍然文摘法案。另一個非抽象類Z可以擴展Y.但是,在你的例子中,A實現它自己的抽象方法是一個矛盾,使它們抽象的一點是它不提供實現,它只是指定方法簽名應該看起來像。

+0

在這種情況下,Y是抽象的,因爲它可能有其他抽象方法? –

+0

@Greg:最有可能的。 –

0

如果你實現一個抽象方法,它不是真的抽象,所以不。

1

抽象類可以有常規方法。如果你想實現類A的一些方法,並將其餘的方法留下抽象,你可以這樣做。然而,抽象方法不能有一個主體,因此如果你將一個方法標記爲抽象,那麼它必須由一個子類來實現,你不能在抽象類中實現它們。然而,你可以有一個沒有抽象方法的抽象類,那麼子類只需要擴展它。

1

是的,您可以在聲明爲抽象的類中實現抽象方法。如果一個類被聲明爲抽象的,並不意味着它的所有方法都必須是抽象的。

對於一個具體的子類,它是不是強制實施那些已經通過其超類的一個實現的抽象方法。