代码解释-------多态

多态的最重要的一条:子类的实例用父类来引用(即父类的引用指向子类的实例)

直接上代码:

没用多态时的代码:

注:考察老师时,每考察一位老师就需要创建一个考察老师方法,然后再依次调用方法,这样代码太过于繁琐。

而,使用多态呢,在考察老师时直接将老师这个对象当做实参传到考察老师的方法里,而形参需要为父类的形式,如:代码里的TeacherInter。这样就可以简化代码,而且功能更加的健全。

abstract class Teacher{
	
	String name;
	
	int age;
	/**
	 *继承多态的抽象方法
	 */
	public abstract void teachLession();
	
	public void sleep(){
		System.out.println(name +"正在睡觉");
	}
	
}

class JavaTeacher extends Teacher{
	/**
	 * 实现了讲课的第一种形态
	 */
	public void teachLession(){
		System.out.println(name + "正在讲多态");
	}
	
}

class PHPTeacher extends Teacher{
	/**
	 * 实现了讲课的第二种形态
	 */
	public void teachLession(){
		System.out.println(name + "正在讲PHP");
	}
	
	
}

class Leader{
	
	/**
	 * 考察java老师讲课情况
	 */
	public void checkJavaTeacher(JavaTeacher jt){
		System.out.println("开始考察");
		//开始讲课
		jt.teachLession();
		System.out.println("考察结束");
	}
	/**
	 * 考察PHP老师讲课情况
	 */
	public void checkPHPTeacher(PHPTeacher pt){
		System.out.println("开始考察");
		//开始讲课
		pt.teachLession();
		System.out.println("考察结束");
	}
	
	
}


class InterDemo8{
	public static void main(String[] args){
		JavaTeacher jt = new JavaTeacher();
		jt.name = "张三";
		
		
		
		PHPTeacher pt = new PHPTeacher();
		pt.name = "李四";
		
		
		//创建领导对象
		Leader leader = new Leader();
		//领导考察java老师张三
		leader.checkJavaTeacher(jt);
		leader.checkPHPTeacher(pt);
		
	}
}

 

引用多态后的代码:

interface TeacherInter{

	public void teachLession();
	
	public void sleep();
	
}

class JavaTeacher implements TeacherInter{
	
	String name;
	
	int age;
	
	public JavaTeacher(String name){
		this.name = name;
	}
	
	/**
	 * 实现了讲课的第一种形态
	 */
	public void teachLession(){
		System.out.println(name + "正在讲多态");
	}
	
	public void sleep(){
		
		System.out.println(name+"在睡觉");
	}
	
	public void smoking(){
		System.out.println(name+"正在抽烟");
	}
	
}

class PHPTeacher implements TeacherInter{
	String name;
	
	int age;
	
	public PHPTeacher(String name){
		this.name = name;
	}
	
	/**
	 * 实现了讲课的第二种形态
	 */
	public void teachLession(){
		System.out.println(name + "正在讲PHP");
	}
	
	public void sleep(){
		System.out.println(name+"睡绳子");
	}
	
}

class Leader{
	
	public void checkTeacher(TeacherInter t){
		String teacher = "";
		//instanceof可以判断我们多态的引用变量到底是什么类型
		if(t instanceof JavaTeacher){
			teacher = "java老师";
		}else if(t instanceof PHPTeacher){
			teacher = "PHP老师";
		}
		System.out.println("开始考察"+teacher);
		//老师开始讲课
		t.teachLession();
		System.out.println("考察结束");
		
	}
	
	
}


class InterDemo10{
	public static void main(String[] args){
		//子类的实例用父类的类型来接收
		TeacherInter jt = new JavaTeacher("张三");
		
		TeacherInter pt = new PHPTeacher("李四");
		
		//子类中的特有方法不能通过父类来调用
		//jt.smoking();错误
		
		Leader leader = new Leader();
		leader.checkTeacher(pt);
		leader.checkTeacher(jt);
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值