当前位置: 首页 > 面试题库 >

使用抽象方法有什么意义?

林星阑
2023-03-14
问题内容

使用“抽象方法”有什么意义?抽象类不能实例化,但是抽象方法呢?他们只是在这里说“您必须实现我”,如果我们忘记了它们,编译器会抛出错误?

这还意味着其他吗?我还阅读了有关“我们不必重写相同的代码”的内容,但是在抽象类中,我们仅“声明”了抽象方法,因此我们将不得不在子类中重写代码。

您能帮我多了解一点吗?我检查了有关“抽象类/方法”的其他主题,但没有找到答案。


问题答案:

除了提醒您必须实现它之外,最大的好处是,任何按其抽象类类型(包括this抽象类本身)引用对象的人都可以使用该方法。

例如,假设我们有一个类负责获取状态并以某种方式对其进行操作。抽象类将负责获取输入,将其转换为long(例如)并以某种方式将该值与先前的值组合在一起-“某种方式”是抽象方法。抽象类可能类似于:

public abstract class StateAccumulator {
    protected abstract long accumulate(long oldState, long newState);

    public handleInput(SomeInputObject input) {
        long inputLong = input.getLong();
        state = accumulate(state, inputLong);
    }

    private long state = SOME_INITIAL_STATE;
}

现在,您可以定义一个累加累加器:

public class AdditionAccumulator extends StateAccumulator {
    @Override
    protected long accumulate(long oldState, long newState) {
        return oldState + newState;
    }
}

没有这种抽象方法,基类将无法说“以某种方式处理此状态”。但是,我们不想在基类中提供默认实现,因为这没有多大意义-
您如何为“其他人可以实现此目标”定义默认实现?

请注意,有多种方法可以给猫皮化。该策略模式将涉及声明声明的接口accumulate模式,并通过该接口的实例到不再视为抽象基类。用术语来说,这是使用合成而不是继承(您已经从两个对象(一个聚合器和一个加法器)中组成了一个加法聚合器。



 类似资料:
  • 问题内容: 可以有一个 实现所有方法 的抽象类-里面没有抽象方法。 例如。: 与拥有与具体类相同的类相比,拥有这样的抽象类(如果有)有什么优势? 我能想到的是,当我将其声明为抽象时,它将不会被实例化。但是,我可以通过将其具体化并将其构造函数设为私有来达到相同的效果。 TIA。 // ================== 编辑:我能想到的另一种用途: 它可能会扩展另一个抽象类或实现一个接口,而不实现

  • 问题内容: 我现在正在学习Java,并且是Abstract的一部分。我读到一个奇怪的部分,我有一个抽象类,其中不包含任何abstarct方法。 他们为什么要使用此类课程? 问题答案: 为了防止实例化该类并将其仅用作基类。子类可以使用抽象类中定义的常规方法。 例如,创建的实例没有任何意义。但是所有车辆都可以重复使用一种通用方法。

  • 问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),

  • 问题内容: 抽象类不能在Java中实例化。但是spring说了用。如果抽象类的状态仅由其子类实例初始化(我想我是对的),那么如果我需要在抽象类中定义的方法内使用该属性,那么…它?我有一组代码如下: 问题答案: Spring中的抽象bean与抽象类有所不同。实际上,Spring中的抽象bean甚至不必映射到任何类。以此为例: And classes: 请注意,并且没有任何共同的父(无论是否抽象)基类

  • 问题内容: 我了解抽象类中的方法都可以是抽象的,也可以不是。但是,为什么不能在“普通”的非抽象类中创建抽象方法呢? 在此先感谢您的解释! 问题答案: 抽象 方法从根本上说,该方法没有实现,需要在 子类中 实现。但是,如果您在 非抽象 类中具有 抽象 方法,则可以实例化该类并获取一个对象,该对象将具有未实现的方法,您将无法调用该方法。 __

  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?