不使用final就停止继承

8 java inheritance

除了将其声明为final或者将其构造函数声明为private之外,还有其他方法可以阻止类的继承吗?

vav*_*ava 30

一条评论

//Do not inherit please
Run Code Online (Sandbox Code Playgroud)


Pet*_*aný 23

还有两个选择:

  • 使每个方法最终,所以人们不能覆盖它们.您可以避免以这种方式从子类中意外调用方法.但这并不会阻止子类化.

  • 把检查放入类的构造函数中:

    if (this.getClass() != MyClass.class) {
        throw new RuntimeException("Subclasses not allowed");
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后没人能够实例化你的类的子类.

(不是我建议使用这些技术,它只是出现在我的脑海里.我将使用final类和/或私有构造函数)


Not*_*tMe 8

最终创建是为了解决这个问题.


Lan*_*uhn 8