动态多态性是指在子类和父类的类体中均定义了具有基本相同声明的非静态成员方法(在成员方法定义中成员方法的声明中不含方法的修饰词 static)。这时也成为子类的成员方法对其父类对应的成员方法的覆盖。
基本相同声明的成员方法要求子类的成员方法和其父类对应的成员方法具有相同的方法名,相同的参数个数并且对应的参数数据类型也相同。而且子类的成员方法应该比父类对应的成员方法具有相同的或更广的访问方式。
public class J_Employee { public int j_workYear; public J_Employee(){ j_workYear = 1; } public void j_printInfo(){ System.out.println("该职工的工作年限为" + j_workYear); } } public class J_Teacher extends J_Employee{ public int j_classHour; public J_Teacher(){ j_classHour = 96; } public void j_printInfo(){ System.out.println("该老师的工作年限是" + j_classHour); System.out.println("该教授的授课的课时是" + j_classHour); } public static void main(String[] args){ J_Employee je = new J_Employee(); //调用 J_Employee 中的成员方法 je.j_printInfo(); je = new J_Teacher(); //调用 J_Teacher 中的成员方法 /*这里要求该父类型的引用所指向的实例对象实际上是子类的实例对象,而且调用的 子类型的成员方法是对其父类型同名方法的覆盖。 */ je.j_printInfo(); } }
/*
运行结果:
该职工的工作年限为1
该老师的工作年限是96
该教授的授课的课时是96
*/