如下: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?
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?
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!
public void dance(){
System.out.println("Hello,This is Lily!");
super.dance(); //这句打印的就是楼主说的调用的子类的方法,
super.singASong();//为什么句却调用的是父类的方法,二者有什么不同,
}
我实验很多次了,只有在子类中用super调用父类中的 (调用了子类重写过的方法的) 方法才会出现这种不同,WHY
singASong()在子类中被重写了,直接调用子类的..
在子类中super.singASong()肯定是会调用父类中的方法,因为super就是用来调用父类中的方法的。我的疑问是用super.dance()已经是进入了父类的方法,那么在父类的dance方法中直接调用singASong()时为何是子类的实现?
如果把方法定义成private就违背了我override的本意了,因为private方法自动就是final的,在子类中定义的与这个private方法同名的方法和它没有任何关系,虽然能够实现所说的功能,却与问题本身无关。