public class Father { public void test()
{  System.out.print("father") ; }}public class Son extends Father { public void test()
{  System.out.print("son");  }}
}
public class Test{ public void static void main()

     (Father )new Son().test();}
}打印结果是什么?为什么?

解决方案 »

  1.   

    (Father )new Son().test(); 
    这条语句好像不能执行。
    最好写成:
    Father aFather = new Son();
    aFather.test();
    结果是:son
    这个知识点应该属于动态邦定的内容。
    其调用的方法应该是aFather这个对象引用所指向的实例的实际类型的方法调用。
    也就是对Son这个类。
    这方面的知识看看继承的多态和动态绑定吧。
      

  2.   

    帮你重写了下 太乱了public class Test {
    public static void main(String[] args) {
    Father f = new Son();
    f.test();
    }
    }class Father {
    public void test() {
    System.out.println("Father");
    }
    }class Son extends Father {
    public void test() {
    System.out.println("Son");
    }
    }你是不是要这个效果?结果是Son
      

  3.   

    你的程序有错误,我改了下,不知你是不是要表达这个意思class Father { public void test() 
    {  System.out.print("father") ; } } class Son extends Father { public void test() 
    {  System.out.print("son");  } } 
     
    public class Test{ public static void main(String args[]) 

        Father farther=new Son();
        farther.test();

    } 输出结果为son
    此时new Son();生成的对象转型为Father的对象,但仍然会先在Son类中搜索test方法,此处调用类Son中的test方法,输出son,如果去掉Son类中的test方法,就会调用类Father中的test方法
     class Father { public void test() 
    {  System.out.print("father") ; } } class Son extends Father { } 
     
    public class Test{ public static void main(String args[]) 

        Father farther=new Son();
        farther.test();

    } 输出father
      

  4.   

    呵呵,看了一下LZ一段代码肯定是无法执行的,2楼3楼都说了,不过main函数的写法也有问题呢仔细看看。
    执行结果肯定是son,无论是直接new son(),还是通过父类去指向,结果都是一样。
    在继承重写方法的时候,父类调用子类的方法就是这样了。建议楼主看看继承方面的一些内容,关于方法的重写和重载问题都可以仔细看一下
      

  5.   

    同意楼上的观点。他说的没错。
    实际上就是
    test方法被动态的覆盖了
    如果非要使用父类的方法
    可以如下:
    class Son extends Father {
        public void test() {
         super.test();//调用父类的方法
            System.out.println("Son");
        }
    }
      

  6.   

    java中的继承方式类似于C++里的虚函数