【问题标题】:how to avoid the inheritance to our class without using final keyword? [closed]如何在不使用 final 关键字的情况下避免对我们类的继承? [关闭]
【发布时间】:2012-07-20 20:44:45
【问题描述】:
class a
{
----
}
class b extends a
{

}

但是我的类a没有继承到b怎么

【问题讨论】:

  • 为什么不想使用final 关键字?这就是final 关键字的作用
  • @biziclop:这让我想起了这个问题:stackoverflow.com/q/4464291/328193 只是对语言的一种奇怪使用,让我觉得我们的问题背后有一些东西'重不见。就像 OP 正在尝试解决更高级别的问题并且需要退后一步来实际解决它,而不是试图让 SO 帮助解决当前尝试的“解决方案”。
  • @David 或者这是一个面试问题,用于测试申请人的编程语言知识。
  • @Jesper:啊,可以。而面试问题总是让我想知道它背后的核心原因是什么,因为它们总是做作并且没有核心原因:) 很多次我都想听到候选人说:“你为什么要那样做?”

标签: java class


【解决方案1】:

您的问题到底是什么?如何防止类a被子类化,但不生成类afinal

使类aprivate的所有构造函数。提供用于创建a 实例的工厂方法。

class a {
    // Private constructor
    private a() {
    }

    // Factory method
    public static a createA() {
        return new a();
    }
}

【讨论】:

  • 它哇..我今天学到了一些新东西:-)
【解决方案2】:

在您的类构造函数中使用以下内容:

if (this.getClass() != A.class) {
    throw new RuntimeException("Subclassing not allowed");
}

但是使用这种方式,你会在运行时限制继承。

【讨论】:

  • 请注意,这不是 100% 安全的方法。如果有人真的想要实例化 A 的子类,他们将能够做到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多