public class BaseClass
{
public BaseClass()
{
fun();
} public void fun()
{
System.out.println( "基类输出" );
}
}class ChildClass extends BaseClass
{
public void fun()
{
System.out.println( "子类输出" );
}}测试类是:public class Main
{
  public static void main(String[] args){
    BaseClass b=new BaseClass();
    ChildClass c=new ChildClass();
  }
}
输入结果是:
           基类输出
           子类输出
我不明白,我构造子类对象时,子类默认调用基类构造方法,基类构造方法去调用本身的fun函数   为什么却执行的子类的fun方法了呢?

解决方案 »

  1.   

    BaseClass b=new BaseClass(); 
    这一句输出 基类输出 ChildClass c=new ChildClass(); 这一句输出  子类输出 
    因为childClass这个类已经重写了BaseClass的fun方法了.
    你可以把BaseClass里的fun方法改成private权限,这样你会看到你想要的结果吧.
      

  2.   


    你学过其他的语言吗?如C++?
    可以看下Thinking in Java 这本书,我也看得这个书学的。效果还可以。
      

  3.   

    因为子类重写了
    public void fun()
    {
    System.out.println( "子类输出" );
      

  4.   

    在子类的构造方法中第一句是super(),子类中又重写了fun()方法。
      

  5.   

    你难得认为子类里有个fun方法,父类里也有fun方法,那不就有两个fun方法了,所以必有其一不存在
    你认为那个fun会存在,
    你要搞清楚,不要以为两个类没写在一起,就是两个类了,你把父类和子类看成一个模块,一个类来想下就明白了.
      

  6.   

    这个题是挺怪的啊,在构造方法里还嵌套方法,我是初学者,见过的一般情况下构造方法里都是什么this.*=*...,最多是在子类里调用一下父类的构造方法,父类的构造方法也都是this.*=*什么的,在父类的构造方法里嵌套别的方法,还重写了,是不多见吧,我想这种情况应该是不建议使用的吧:)