class Father{
int x;
Father(){
x=3;
System.out.println("calling father:x="+x);
}
void doSomething(){
System.out.println("calling Father.doSomething()");
}
}
class Son extends Father{
int x;
Son()
{
super();
x=5;
System.out.println("calling Son:x="+x);
}
void doSomething(){
super.doSomething();
System.out.println("calling Son.doSomething");
System.out.println("Father.x="+super.x+" Son.x="+x);
}
}
public class SuperDemo{
public static void main(String args[]){
Son son=new Son();
son.doSomething();
}
}运行的时候为什么会出错??

解决方案 »

  1.   

    E:\PFA2008\5>java SuperDemo
    calling father:x=3
    calling Son:x=5
    calling Father.doSomething()
    calling Son.doSomething
    Father.x=3 Son.x=5没得问题
      

  2.   

    输出结果:calling father:x=3
    calling Son:x=5
    calling Father.doSomething(
    calling Son.doSomething
    Father.x=3 Son.x=5
    Press any key to continue..正常 鉴定完毕
      

  3.   

    程序运行没有问题,我想这个程序应该是用来验证继承关系中jvm对于类的加载顺序,以及子类中的属性和方法对父类中同名的属性和方法的覆盖问题的。jvm的加载顺序是先加载父类,然后加载子类。因为,子类继承了来自父类中的属性和方法,所以生成子类对象之间必须先有父类对象作为基础。所以要先初始化父类,然后才初始化子类,在进行方法的调用。
      

  4.   

    public class SuperDemo{
        public static void main(String args[]){
            Son son=new Son();
            son.doSomething();//这里的方法是子类的
        }
    }
      

  5.   

    在j2sdk1.4.2_04版本下运行结果如下:calling father:x=3
    calling Son:x=5
    calling Father.doSomething()
    calling Son.doSomething
    Father.x=3 Son.x=5或者你能具体说说是什么错误提示吗?
    我运行的也没有错
      

  6.   

    没有错,估计环境变量没有配好,如果配好,应该是:
    javac  SuperDemo.java
    java   SuperDemo 在调用子类的构造方法时,会自动的调用父类的构造方法,但在调用子类的dosomeing()方法时,
    不会自动的调用父类的dosomeing()方法,必须显示的调用super().dosomeing() ,在Son()方法
    内的super()可以去掉.