如下:public class CDog {
public void dance(){
System.out.println("Let me show you a big show!");
singASong();
};
public void singASong(){
System.out.println("Sing happy dog!");
};
}public class CDogLily extends CDog{
public void dance(){
System.out.println("Hello,This is Lily!");
super.dance(); 
}
public void singASong(){
System.out.println("This is Lily singing a song!");
};
}public class ClassDemo {
public static void main(String[] args){
CDogLily lily = new CDogLily();
lily.dance();
}
}子类中的dance方法调用了超类中的dance方法,超类中的dance方法调用了singASong方法。输出如下:
Hello,This is Lily!
Let me show you a big show!
This is Lily singing a song!为何超类中的dance方法调用的不是超类中的singASong方法,而调用了子类中的singASong?

解决方案 »

  1.   

    因为你在子类中重写了父类中的singAsong方法,所以调用的是子类的方法…
      

  2.   

    那如果我想在super.dance()中使用父类的singASong()方法该怎么做?
      

  3.   

    把那个方法申明为final类型的:
    class CDog { 

    public void dance(){ 
    System.out.println("Let me show you a big show!"); 
    singASong(); 
    }; 
    public final void singASong(){ 
    System.out.println("Sing happy dog!"); 
    }
    } class CDogLily extends CDog{ 

    public void dance(){ 
    System.out.println("Hello,This is Lily!"); 
    super.dance(); 

            //下面的就不要了
    // public void singASong(){ 
    // System.out.println("This is Lily singing a song!"); 
    // }
    } public class ClassDemo { 
    public static void main(String[] args){ 
    CDogLily lily = new CDogLily(); 
    lily.dance(); 


    你要的结果是不是这样:
    Hello,This is Lily!
    Let me show you a big show!
    Sing happy dog!
      

  4.   

    你在用new关键字实例化对象的时候,实例化的是子类的对象啊!这就是所谓的上溯造型。
      

  5.   

    把singASong变成private它就不会调用子类的了
      

  6.   

    把singASong变成private它就不会调用子类的了????????????请先确定能编译得过  楼上两位请别勿导
      

  7.   

    今天我也碰到这个问题, 谁都解释下,我加这句话后,为什么结果不一样呢,
    public void dance(){ 
            System.out.println("Hello,This is Lily!"); 
            super.dance(); //这句打印的就是楼主说的调用的子类的方法,
            super.singASong();//为什么句却调用的是父类的方法,二者有什么不同,
        } 
    我实验很多次了,只有在子类中用super调用父类中的 (调用了子类重写过的方法的) 方法才会出现这种不同,WHY
      

  8.   

    CDogLily lily = new CDogLily();定义的是子类对象,
    singASong()在子类中被重写了,直接调用子类的..
      

  9.   


    在子类中super.singASong()肯定是会调用父类中的方法,因为super就是用来调用父类中的方法的。我的疑问是用super.dance()已经是进入了父类的方法,那么在父类的dance方法中直接调用singASong()时为何是子类的实现?
      

  10.   


    如果把方法定义成private就违背了我override的本意了,因为private方法自动就是final的,在子类中定义的与这个private方法同名的方法和它没有任何关系,虽然能够实现所说的功能,却与问题本身无关。