我想继承java.net.URL,但我不能,因为它是最终的。我收到错误:
cannot inherit from final java.net.URL
为什么是最终的?
为什么String is final说明JVM依赖于String的问题的一些答案,因为它是一种非常基本的数据类型。我无法看到这将如何应用于URL类型。
更新
许多答案和评论都说明了原因,为什么避免继承是一种好习惯。有些人甚至认为一切都应该是最终的。但现实是不同的。 JDK中的大多数类都是而不是 final。良好的做法是一个应该不从java.net.URL继承的原因。这甚至可能适用于JDK的任何类。但是当某些内容被定义为最终内容时,可以不能继承。这仅适用于极少数类,如String或URL。
因此,URL和所有其他非最终类之间必定存在不同之处。问题是:这是什么区别,这使得必要的URL是最终的?
说我不应该关心这个问题,因为我不应该继承这个问题。
答案 0 :(得分:6)
这是最后一个特别是阻止你扩展它。 However it works internally,它不是为继承而设计的,所以作者阻止你这样做。
记住 Effective Java:
因此,不是扩展URL
,而是创建一个具有URL
字段的类。
答案 1 :(得分:2)
我猜这是出于安全原因。如果方法需要URL对象作为参数,并且您可以扩展URL类以执行URL类不应该执行的操作,那么它可能存在安全问题。
答案 2 :(得分:0)
AFAIK URL是IETF RFC标准的完整实现,因此不希望您想要更改或扩展它。