【问题标题】:implementing abstract methods/classes in java在java中实现抽象方法/类
【发布时间】:2011-12-01 16:47:15
【问题描述】:

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

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

【问题讨论】:

    标签: java methods abstraction base derived


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      是的,但它不能再抽象了。抽象意味着没有实现。

      你可以做的是:

      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 继承了该默认实现。

      【讨论】:

      • 没有实现基本方法?
      【解决方案3】:

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

      【讨论】:

      • 在这种情况下,Y 是抽象的,因为它可能还有其他抽象方法?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • +1,虽然正确地说,我相信答案应该是“是和否”,因为 OP 实际上问了两个问题(你只用文字回答了第一个问题,但用代码回答了第二个问题)。
          【解决方案7】:

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

          对于一个具体的子类,实现其超类之一已经实现的抽象方法不是强制性的。

          【讨论】:

            猜你喜欢
            • 2022-11-20
            • 2011-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-30
            • 2016-08-13
            • 1970-01-01
            • 2016-12-28
            相关资源
            最近更新 更多