2011-04-06 84 views
0

是否有可能编译父类的java类子, 调用子类的方法不要求父类的加载。在没有类加载父类的情况下调用子类方法?

可以编译或运行某些高级选项。

例如 我有3类

public class Parent { 
    public void baseMethod(){ 
     System.out.println("Parent.baseMethod invoked"); 
    } 
} 

public class Child extends Parent{ 
    public void childMethod(){ 
     System.out.println("Child.childMethod invoked"); 
    } 

} 

public class Main { 
    public static void main(String[] args) { 
     new Child().childMethod(); 
    } 
} 

我编译,以及删除Parent.class。

我想运行

java Main 

没有exeption

+0

为什么你想这样做,想要什么家长? – 2011-04-06 07:31:56

+1

如果你想删除父类,那么你不需要它的方法和属性。如果你不需要它的方法和属性,你为什么要扩展它? – 2011-04-06 07:35:58

+0

除了明显需要加载父类[导致NoClassDefFoundError]外,Child的不可见构造函数确实包含对超级构造函数的调用。所以你不能编译,你可以用Parent类运行时间。 – bestsss 2011-04-06 07:55:03

回答

4

号路。 Java将始终加载超类。超类是要求来创建实际的实例。

创建一个新的Child会做一个隐式调用Parent(),当你需要的Parent加载那。


PS - 甚至不工作,如果你只是想呼吁子类的静态方法,像:

public class Parent {} 
public class Child {public static void hello(){System.out.println("hello");}} 
public class Caller{public static void main(String[] args){Child.hello();}} 

删除Parent.class将抛出一个NoClassDefFoundError即使没有Child实例是曾经创造。

3

没有

它将载入父类,这就是为什么继承是存在的。

extends Parent谈到它会寻找Parent类加载它使关系

请参见

+0

为链接+1。我搜查自己,没有提出任何类似的东西。我很惊讶这篇教程没有深入讨论。 – 2011-04-06 08:04:49

1

继承手段:孩子IS父母,所以你不能。

2

它不工作的方式。

当一个类被加载时,首先加载它所有的超类。如果找不到,班级将无法加载。

0

您必须加载超级类或类才能加载类。

你,如果这是不可取的,唯一的选择就是

  • 使孩子不再是一个子类的父的,无论是在代码或与字节码操作运行。
  • 更换为另一版本,你想要做什么,或者不你不(在代码或在运行时再次)
相关问题