簡體   English   中英

在java中實現抽象方法/類

[英]implementing abstract methods/classes in java

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

如果答案是肯定的,並且在基類A中存在實現的抽象方法,並且存在來自A的派生類B(B不是抽象的)。 B仍然必須實現該基本抽象方法嗎?

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

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()。

你可以有兩個抽象類,X和Y,其中Y擴展X.在這種情況下,Y實現X的抽象方法,同時仍然是抽象的,這是有意義的。 另一個非抽象類Z可以擴展Y.但是,在你的例子中,對於A來實現它自己的抽象方法是一個矛盾,使它們成為抽象的點是因為它不提供實現,它只是指定方法簽名是什么應該是這樣的。

抽象類可以有常規方法。 如果要實現A類的某些方法並將其余方法保留為抽象,則可以執行此操作。 但是,抽象方法不能有一個體,因此如果將方法標記為抽象,則必須由子類實現,不能在抽象類中實現它們。 但是,您可以擁有一個沒有抽象方法的抽象類,然后子類只需要擴展它。

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

對於具體的子類,不必強制實現已由其超類之一實現的抽象方法。

抽象方法意味着由子類定義。 有關更多信息,請參閱抽象方法和類 但是,您可以在基類中定義方法,並在需要時讓子類覆蓋它。

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

你能做的是:

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繼承了該默認實現。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM