【发布时间】:2016-12-26 09:00:01
【问题描述】:
我需要将自己的类扩展为库类 (org.jsoup.nodes.Node)。
超类是抽象的并且包含抽象方法。我的问题是其中一些抽象方法没有修饰符,这意味着默认情况下我没有访问权限,也无法覆盖它们。当我尝试这样做时,我会收到以下消息:
方法不会覆盖其超类中的方法
我该如何解决这个问题?
【问题讨论】:
标签: java inheritance jsoup abstract extend
我需要将自己的类扩展为库类 (org.jsoup.nodes.Node)。
超类是抽象的并且包含抽象方法。我的问题是其中一些抽象方法没有修饰符,这意味着默认情况下我没有访问权限,也无法覆盖它们。当我尝试这样做时,我会收到以下消息:
方法不会覆盖其超类中的方法
我该如何解决这个问题?
【问题讨论】:
标签: java inheritance jsoup abstract extend
没有访问修饰符的方法是包私有的。对您引用的类进行子类化的唯一方法是在包org.jsoup.nodes 中声明您的类,因此它在同一个包中。
package org.jsoup.nodes;
class MyNode extends Node {
// ...
}
实际上没有什么能阻止你这样做。
但鉴于该类声明了包私有成员,它可能并不意味着要在库之外进行子类化。
【讨论】:
java.lang,但我在 JLS 中找不到。
jsoup-1.9.2-sources.jar)并对其进行更改吗?这有效吗?
如果你必须在声明中扩展它,这里没有什么可做的,只是改变超类方法的可见性或将你自己的类移动到超类包中,因为默认情况下所有 java 方法都是“受保护的”,这意味着只有来自同一个包的类可以使用它们。如果运行时调用适合您的需要,您也可以尝试反射。
【讨论】:
Default 访问说明符不同于 protected。请查看此答案一次:stackoverflow.com/a/31413248/2815219