/**
* 测试结果:多态说法
* 运行时多态:同一个方法,针对不同对象而言,执行过程和结果可能不同;父类作为参数,调用父类引用名的方法;
* 但是,我们调用,传递子类的对象;最终结果,和子类对象的执行结果是一致;
* 用多态的原因是,如果每出现一个对象,就要多一种方法来写这个对象(老师),这样代码可维护性差
* 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();
}
}
Q21:Java多态实例解析
最新推荐文章于 2023-04-23 22:18:27 发布