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

有一个没有抽象方法的抽象类有什么意义?

颜文康
2023-03-14
问题内容

可以有一个 实现所有方法 的抽象类-里面没有抽象方法。

例如。:

public abstract class someClass { 
    int a; 
    public someClass (int a) { this.a = a; } 
    public void m1 () { /* do something */ } 
    private void m2 () { /* do something else */ }  
}

与拥有与具体类相同的类相比,拥有这样的抽象类(如果有)有什么优势?

我能想到的是,当我将其声明为抽象时,它将不会被实例化。但是,我可以通过将其具体化并将其构造函数设为私有来达到相同的效果。

TIA。

// ==================

编辑:我能想到的另一种用途:

它可能会扩展另一个抽象类或实现一个接口,而不实现该类的抽象方法-尽管它正在实现自己的所有方法。不管它的价值。


问题答案:

它具有概念上的含义:此类的行为本身没有任何意义。

诚然,很难想象没有明确定义的扩展点(即抽象方法)的情况,但是有时这将是一个合理准确的问题模型。

你可以有这样的事情:

public abstract class ObjectWithId {
    private final String id;

    public ObjectWithId( String id ) {
       this.id = id;
    }

    public final String getId() {
       return id;
    }
}

然后,您可以扩展它以声明具有id的不同类型的对象。在这里,您具有完全指定和实现的行为,但对子类可能没有表现出任何其他行为的限制。

请注意,尽管建模相同事物的一种更整洁的方法是使用合成而不是继承。

public final class ObjectWithId<T> {
    private final String id;
    private final T ob;

    public ObjectWithId( String id, T ob ) {
       this.id = id;
       this.ob = ob;
    }

    public String getId() {
       return id;
    }

    public T getObject() {
       return ob;
    }
}

但是在引入泛型之前(在Java版本1.4之前),这并没有那么优雅,而且显然比抽象类解决方案要好,因为您必须在类型安全性方面进行交易。



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

  • 问题内容: 是否可以在不添加抽象方法的情况下定义抽象类? 问题答案: 当然。 声明一个类抽象仅意味着您不允许自己对其进行实例化。 声明方法抽象意味着子类必须提供该方法的实现。 这两个是单独的概念,尽管很明显,您不能在非抽象类中使用抽象方法。您甚至可以使用带有方法的抽象类,但绝不能相反。

  • 问题内容: 使用“抽象方法”有什么意义?抽象类不能实例化,但是抽象方法呢?他们只是在这里说“您必须实现我”,如果我们忘记了它们,编译器会抛出错误? 这还意味着其他吗?我还阅读了有关“我们不必重写相同的代码”的内容,但是在抽象类中,我们仅“声明”了抽象方法,因此我们将不得不在子类中重写代码。 您能帮我多了解一点吗?我检查了有关“抽象类/方法”的其他主题,但没有找到答案。 问题答案: 除了提醒您必须实

  • 问题内容: 抽象类是否必须至少具有一个抽象方法? 问题答案: 这篇文章的主题和正文提出了两个不同的问题: 它应该至少有一个抽象成员吗? 是否需要至少一个抽象成员? #2的答案肯定是“否”。 #1的答案是主观的,是风格的问题。我个人会说是的。如果您的目的是防止实例化一个类(没有抽象方法),那么最好的方法是使用构造函数,而不是对其进行标记。

  • 本文向大家介绍抽象类必须要有抽象方法吗?相关面试题,主要包含被问及抽象类必须要有抽象方法吗?时的应答技巧和注意事项,需要的朋友参考一下 不需要,抽象类不一定非要有抽象方法;但是包含一个抽象方法的类一定是抽象类。 示例代码: 上面代码,抽象类并没有抽象方法但完全可以正常运行。

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