Q21:Java多态实例解析

it2025-03-15  30

/** * 测试结果:多态说法 * 运行时多态:同一个方法,针对不同对象而言,执行过程和结果可能不同;父类作为参数,调用父类引用名的方法; * 但是,我们调用,传递子类的对象;最终结果,和子类对象的执行结果是一致; * 用多态的原因是,如果每出现一个对象,就要多一种方法来写这个对象(老师),这样代码可维护性差 * java中实现多态的方式(继承) * 1、创建父类、子类、子类重新父亲中的方法 * 2、创建“场景类”将父亲引用作为方法参数 * 3、调用方法,传递的子类对象,那么结果根据子类对象的不同而不同 * @author 白菜小皮艇 * */ //程序入口 public class TestTeacher1 { public static void main(String[] args) { // TODO Auto-generated method stub //创建classroom对象 Classroom cr = new Classroom(); //Java老师来上课 JavaTeacher jt = new JavaTeacher("Java老师"); // jt作为实际参数传递到cr中的classroom 的givelesson方法 cr.giveLesson(jt); //PE老师来上课 PETeacher pt = new PETeacher("体育老师"); cr.giveLesson(pt); //不用多态时的写法 // JavaTeacher1 jt = new JavaTeacher1("老杨"); // jt.showLesson(); // PETeacher pt = new PETeacher("老张啊"); // pt.showLesson(); } } //父类 class Teacher1 { private String name; /** * 带参构造 * @param name 老师的名字 */ public Teacher1(String name) { this.name = name; } //上课的方法 public void showLesson() { System.out.println(name + "——正在上课"); } } //子类 class JavaTeacher extends Teacher1 { public JavaTeacher(String name) { super(name); // TODO Auto-generated constructor stub } @Override // 方法重写 public void showLesson() { // TODO Auto-generated method stub //调用父类的方法 super.showLesson(); //这是自己子类中的方法 System.out.println("Java课开始了,大家打开eclipse"); } } //子类 class PETeacher extends Teacher1{ public PETeacher(String name){ super(name); } @Override public void showLesson() { // TODO Auto-generated method stub //调用不是继承 //调用父类的方法 super.showLesson(); //这是自己子类中的方法 System.out.println("体育课开始了,请大家排好队"); } } //教室类 class Classroom { public void giveLesson(Teacher1 t) { //如果子类重写了父类的方法showLesson(),则调子类,否则就调父类 //这里是调用子类的方法(发送消息) t.showLesson(); } }

最新回复(0)