多态

多态的概念:

所谓多态,其实就是一种物质多种状态。比如动物有吃的功能,够吃骨头 ,兔子吃草,猫吃鱼。

程序中的多态:

多态:同一个引用类型,使用不同的实例而执行不同操作;

打印机    打印机1   =  new   黑色打印机();

打印机    打印机2   =  new   彩色打印机();

网银接口   网银1  =   new 京东();

网银接口   网银2  =   new 淘宝();

语法:(特征)

     1) 方法重写。

     2) 父类引用 ->  子类对象

            接口引用 ->  实现类对象

多态应用:

      1) 类 多态;

      2) 接口多态;

      3) 参数多态。

多态的好处:

    1)屏蔽了子类的差异,更换 子类对象;

    2)一个父类类型 可以接收  所有的子类对象。

练习1:使用多态实现下图的功能。有狗和猫 宠物店  宠物店 动物需要看病

分析:猫和狗 抽象为动物类  宠物医院 依赖于动物 

package com.test.inter;
//宠物类
class Pet{
	private String name;
	public void eat(){
		System.out.println("吃东西");
	}
	public Pet(String name){
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}
//狗
class Dog extends Pet{

	public Dog(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}
	public void eat(){
		System.out.println("吃骨头");
	}
	public void lookDoor(){
		System.out.println("看家");
	}
	
}
//猫
class Cat extends Pet{

	public Cat(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}
	public void eat(){
		System.out.println("吃鱼");
	}
	public void  mouse (){
		System.out.println("抓老鼠");
	}
	
}
//宠物医院
class PetHospital{
	public void treatment(Pet pet){
		System.out.println("给"+pet.getName()+"看病,看好了吃:");
		pet.eat();
		if(pet instanceof Dog){
			Dog dog = (Dog)pet;
			System.out.println("吃饱了之后");
			dog.lookDoor();
		}else if(pet instanceof Cat){
			Cat cat = (Cat)pet;
			System.out.println("吃饱了之后");
			cat.mouse();
		}
	}
}
public class TestHospital {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pet dog = new Dog("萨摩耶");
		PetHospital ph = new PetHospital();
		ph.treatment(dog);
		Pet cat = new Cat("挪威森林猫");
		ph.treatment(cat);
	}

}


运行结果:
给萨摩耶看病,看好了吃:
吃骨头
吃饱了之后
看家
给挪威森林猫看病,看好了吃:
吃鱼
吃饱了之后
抓老鼠

练习2:有数学老师  语文老师    数学老师会跳舞   语文老师会唱歌  当然他们都上课。请用多态实现

package com.test.inter;


class Teatcher{
	private String name;
	
	public Teatcher(){
		
	}
	public Teatcher(String name){
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void attend(){
		System.out.println("燃烧的蜡烛");
	}
}
class STeatcher extends Teatcher{
	
	public void attend(){
		System.out.println("教学课");
	}
	public void sing(){
		System.out.println("会唱歌");
	}
	
}
class YTeatcher  extends Teatcher{
	
	public void attend(){
		System.out.println("语文课");
	}
	
	public void dance(){
		System.out.println("会跳舞");
	}	
}
public class TestTeacher {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Teatcher t1 = new YTeatcher();
		 t1.setName("苏东坡");
		System.out.println(t1.getName());
		t1.attend();
		YTeatcher y= (YTeatcher)t1;		
		y.dance();
		Teatcher s2 = new STeatcher();
		s2.setName("爱因斯坦");
		System.out.println(s2.getName());
		s2.attend();
		STeatcher st = (STeatcher)s2;
		st.sing();
		
	}

}

练习3:

实现:

网银接口   网银1  =   new 京东();

网银接口   网银2  =   new 淘宝();

package com.test.inter;



interface  WY  {
	void zf();
}

class JD implements WY{

	@Override
	public void zf() {
		// TODO Auto-generated method stub
		System.out.println("京东实现支付");
	}
	
}
class TB implements WY{

	@Override
	public void zf() {
		// TODO Auto-generated method stub
		System.out.println("淘宝实现支付");
	}
	
}
public class TestJY {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WY tb = new TB();
		tb.zf();
		WY jd = new JD();
		jd.zf();
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值