日期:2014-05-20  浏览次数:20716 次

搞糊涂了
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

------解决方案--------------------
stu是Student的实例啊,否则多态还有什么用呢?
------解决方案--------------------
好像是传说中的方法覆盖吧?
------解决方案--------------------
多态
------解决方案--------------------
多态的明显特征,根据对象的类型进行绑定,称为动态绑定。
OldStudent stu=new Student(); 这里创建了一个Student对象,并把它的引用立立即赋值给OldStudent 通过继承,Student就是一种OldStudent。

------解决方案--------------------
建议参考Thinging in java关于多态的介绍
------解决方案--------------------
因为你申明的是一个以子类为实例的父类对象....

子类中的toS方法将父类方法覆盖了...
------解决方案--------------------
多态性的体现,,,你用父类构造了子类对象,,子类重写了toS方法,所以输入结果是it 's class Student

------解决方案--------------------
问题的关键是在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
------解决方案--------------------
多态性
子类重写了父类的方法
------解决方案--------------------
多态,没问题!