class OldStudent{
public String toS(){
return "it's class OldStudent ";
}
}class Student extends OldStudent{ public String toS(){
return "it's class Student ";
}public void toSS(){

}
public static void main(String[] args){ 
OldStudent stu=new Student(); System.out.println(stu); System.out.println(stu.toS());//应该指向的是父类的toS()方法呀
}
}为什么输出it's class Student.而不是it's class OldStudent

解决方案 »

  1.   

    stu是Student的实例啊,否则多态还有什么用呢?
      

  2.   

    多态的明显特征,根据对象的类型进行绑定,称为动态绑定。
    OldStudent stu=new Student(); 这里创建了一个Student对象,并把它的引用立立即赋值给OldStudent 通过继承,Student就是一种OldStudent。
      

  3.   

    建议参考Thinging in java关于多态的介绍
      

  4.   

    是多态的缘故,Java可以自动向下溯型到子类
      

  5.   

    因为你申明的是一个以子类为实例的父类对象....子类中的toS方法将父类方法覆盖了...
      

  6.   

    多态性的体现,,,你用父类构造了子类对象,,子类重写了toS方法,所以输入结果是it's class Student
      

  7.   

    问题的关键是在OldStudent stu=new Student(); 
    OldStudent是父类的,Student是子类的.子类继承了父类,而且重写了父类的方法String toS()
     因为子类中方法String toS()中的return "it's class Student ";覆盖了父类方法String toS()中的return "it's class OldStudent ";.所以最终输出it's class Student