多态:运行时引用指向子元素的实例对象【jvm内存模型很重要,也是入门的基础】
接着上面继续理解,创建一个老师类
package com.physical;
public class Teacher extends Person{
String profession;
int teacherid;
//一个无参的构造器
Teacher(){
}
//有参的构造器
Teacher(int teacherid,String sname){
super(teacherid,sname);
}
@Override
void toDoThings() {
System.out.println("我叫"+sname+"身份证号是:"+idcard+"是一名"+profession+"工号是"+teacherid);
}
@Override
void eatFood() {
System.out.println("我是一名老师");
System.out.println("每天一日三餐很规律");
System.out.println("时间允许的条件下,我还会打下太极");
}
}
实现结果
package com.physical;
public class Test {
public static void main(String[] args) {
Person p=null;
Student stu=new Student(123456789,"Joncky");
stu.profession="学生";
stu.stuid=001;
p=stu;
p.toDoThings();
p.eatFood();
Teacher t=new Teacher(987654321,"bear");
t.profession="老师";
t.teacherid=985986;
p=t;
p.eatFood();
p.toDoThings();
}
}
其实多态实现了运行时的动态绑定JAVA引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态(Polymorphism)。
更好的例子请见:https://zhidao.baidu.com/question/345445792.html