class ConstructInvokeMetamorph{
public static void main(String args[]){
Person p=new Student("李明",18,"北大");
}
}
class Person{
String name="未命名";
int age=-1;
Person(String name,int age){
this.name=name;this.age=age;
sayHello();
}
void sayHello(){
System.out.println("我是一個人,我名叫:"+name+",年齡為:"+age);
}
}
class Student extends Person{
String school="未定學校";
Student(String name,int age,String school){
super(name,age);
this.school=school;
}
void sayHello(){
System.out.println("我是學生,我名叫:"+name+",年齡為:"+age+",學校在:"+school);
}
}
  此程序有几個不大明白之處﹐首先對Person p=new Student("李明",18,"北大")這句﹐我試了一下﹐將Person改成Student后結果不變﹐到底這句該怎樣理解呢?我想了很長時間都沒想通﹐誰能教我一下。
其次﹐此程序好象還涉及到虛方法調用的問題﹐我雖然看了書但還是不大明白﹐誰能再具體講講﹐感謝各位﹗﹗﹗﹗

解决方案 »

  1.   

    person是student 的基类
    用它子类的对象为他赋值,如果子类有与他相同的方法,它所调用的就是子类里的那个方法
      

  2.   

    java的多态性.Student(is-a)是一个Person吧,那当然可以Person p=new Student("李明",18,"北大");,反过来就不行了,你不能说Person(is-a)是一个Student:Student p=new Person("","","");这样理解吗?
      

  3.   

    在Person類中調用sayHello方法時為什么調用的是子類的sayHello的方法呢?