4

我可以在java中的抽象基类A中实现抽象方法吗?

如果答案是肯定的,并且在基类 A 中有一个已实现的抽象方法,并且有来自 A 的派生类 B(B 不是抽象的)。B 是否仍然必须实现该基本抽象方法?

4

7 回答 7

9

如果我正确理解你的问题,是的。

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

于 2011-10-05T17:56:57.427 回答
1

你可以有两个抽象类,X 和 Y,其中 Y 扩展了 X。在这种情况下,Y 实现 X 的抽象方法是有意义的,同时仍然是抽象的。另一个非抽象类 Z 可以扩展 Y。但是,在您的示例中,对于 A 实现自己的抽象方法是矛盾的,将它们抽象化的目的是它不提供实现,它只是指定方法签名应该看起来像。

于 2011-10-05T17:51:53.560 回答
1

如果你实现一个抽象方法,它就不再是抽象的了,所以不。

于 2011-10-05T17:53:59.813 回答
1

抽象类可以有常规方法。如果您想实现类 A 的一些方法,而将其余方法保留为抽象,您可以这样做。但是,抽象方法不能有主体,因此如果将方法标记为抽象,则必须由子类实现,不能在抽象类中实现。但是,你可以有一个没有抽象方法的抽象类,然后子类只需要扩展它。

于 2011-10-05T17:54:02.533 回答
1

是的,您可以在声明为抽象的类中实现抽象方法。如果一个类被声明为抽象的,这并不意味着它的所有方法都必须是抽象的。

For a concrete sub class, it is not mandatory to implement the abstract methods that are already implemented by one of their super class.

于 2011-10-05T19:36:20.763 回答
0

没有。抽象方法是由子类定义的。有关详细信息,请参阅抽象方法和类。但是,如果需要,您可以在基类中定义一个方法并让子类覆盖它。

于 2011-10-05T17:49:26.117 回答
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 继承了该默认实现。

于 2011-10-05T17:50:30.750 回答