【问题标题】:Need and Use of abstract methods in abstract Class or interfaces [closed]抽象类或接口中抽象方法的需要和使用[关闭]
【发布时间】:2017-11-15 00:49:38
【问题描述】:

当我们必须在子类中提供它们的实现时,抽象类的抽象方法或接口的方法需要什么。直接在子类中提供这些方法而不是在抽象类或接口中使它们成为抽象方法不是更好吗?

【问题讨论】:

  • 重点是可重用性和减少冗余,或者更简单的说,你可以只实现你需要的方法,并且可以一次又一次地重用原来的抽象类。
  • 但实际需要是什么。当您必须在所有子类中一次又一次地提供方法的完整实现时,代码可重用性在哪里,在哪里减少冗余???
  • 我相信你应该从研究继承的工作原理开始。这个问题源于对什么是多态性缺乏了解。
  • 我对继承和 oops 有一个想法,但我问的是该概念的实际实际用途。不是接口就像类和接口之间的“合同”的理论类型定义。我的 Q 才是真正的好处。代码可重用性来自于实现抽象方法。
  • 我的意思是,如果你不了解抽象方法和接口的好处,那么你需要加深继承概念。 Here你可能会找到一个很好的解释。

标签: java c# oop


【解决方案1】:

如果你在抽象类中定义了抽象方法,那么抽象类的非抽象方法可以调用这些方法而不知道它们将如何实现。

此外,在抽象类或接口中定义抽象方法允许您编写仅依赖抽象类或接口方法的代码,而不依赖于具体的子类或实现类。

例如:

public abstract class AbstractClass
{
    public abstract void method1();

    public void method2() {
        ...
        method1();
        ...
    }
}

public class ConcreteClass extends AbstractClass
{
    public void method1() {
        ...
    }
}

如果不将method1 定义为AbstractClass 中的abstract,则无法从method2 中的method2 调用method1,因为它仅在具体子类ConcreteClass 中实现。

【讨论】:

  • 我的问题是,当您必须在 ConcreteClass 中定义 method1 时,在“AbstractClass”中定义它有什么好处。这个公共类 ConcreteClass { public void method1() { ... } } 有什么问题
  • @Sumit 正如我在代码示例中所展示的,它允许您从AbstractClass 调用method1,即使AbstractClass 没有该方法的实现。
  • 这就是我要问的,“AbstractClass”的“method1”在没有任何实现的情况下有什么用,为什么不直接在ConcreteClass中使用呢。
  • @Sumit AbstractClass 仍然可以调用它自己没有实现的方法(而是由它的具体子类实现)。这是一种常见的设计模式(参见en.wikipedia.org/wiki/Strategy_pattern)。
猜你喜欢
  • 1970-01-01
  • 2010-09-24
  • 2010-11-16
  • 2015-06-27
  • 2023-04-03
  • 2017-02-19
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多