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