[英]Can a public class's super class be package private?
在同一个包中有2个类合法,其中一个类是另一类的子类,该子类是公共的,而超类是包私有的,这是合法的吗?
例如:
package test;
class SuperClass {
public void f(){}
}
package test;
public class SubClass extends SuperClass {
}
我的测试表明,JavaDoc呈现子类的文档,就好像超类不存在一样。 更不用说超一流了。 在父类中声明和实现的公共方法就像在子类中声明的那样显示。
Java反射API表现出类似的行为:在Method
上调用.getDeclaringClass()
时,在超类中声明和实现的公共方法返回子类。 但是, subclass.getSuperclass()
确实返回正确的超类。
其他类和输出:
package test;
public class InstanceOfChecker {
public static boolean isInstanceOfSuperClass(Object o){
return (o instanceof SuperClass);
}
}
package otherpackage;
public class Test {
public static void main(String[] args) throws Exception {
System.out.println("f() declaring class: "
+ SubClass.class.getMethod("f").getDeclaringClass().getName());
System.out.println("super class: "
+ SubClass.class.getSuperclass().getName());
System.out.println("InstanceOfChecker returns: "
+ InstanceOfChecker.isInstanceOfSuperClass(new SubClass()));
}
}
输出:
f() declaring class: test.SubClass
super class: test.SuperClass
InstanceChecker returns: true
是
没有
我很少看到它,但是您可以在JVM中找到它两次(但是我现在不记得了,我在哪里看到过它)
我不知道我曾见过对此技术的建议或劝阻。
关于为什么要这样做。 您可能想使用共享许多代码的公共类创建一个库。 因此,您将创建一个包含不想公开的代码的抽象类,以确保可以在不中断代码的情况下对此类进行更改。 protected
不能阻止这种情况,因此您可以使抽象类包可见。 它迫使您将所有子类放入同一包中,但这通常不是真正的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.