在尝试使用默认访问器覆盖方法时,我遇到了一种奇怪的行为(例如:)void run()
.根据Java规范,如果类属于同一个包,则类可以使用或覆盖基类的默认成员.当所有类从同一个类加载器加载时,一切正常.但是如果我尝试从单独的类加载器加载子类,则多态性不起作用.
这是样本:
App.java:
import java.net.*;
import java.lang.reflect.Method;
public class App {
public static class Base {
void run() {
System.out.println("error");
}
}
public static class Inside extends Base {
@Override
void run() {
System.out.println("ok. inside");
}
}
public static void main(String[] args) throws Exception {
{
Base p = (Base) Class.forName(Inside.class.getName()).newInstance();
System.out.println(p.getClass());
p.run();
} {
// path to Outside.class
URL[] url = { new URL("file:/home/mart/workspace6/test2/bin/") };
URLClassLoader ucl = URLClassLoader.newInstance(url);
final Base p …
Run Code Online (Sandbox Code Playgroud)