Java--多态

多态字面意思是,多种形态。
Java中的表现:
Fu f=new Zi();
在父类(或接口)中引用子类对象。
好处
提高了程序后期的维护性和延展性
前提
需要存在继承或者实现关系
要有覆盖操作

abstract class Animal{
	abstract void eat();
}
class Cat extends Animal{
	public void eat()
	{
		System.out.println("猫喵喵吃饭");
	}
	public void Catch()
	{
		System.out.println("小猫抓老鼠");
	}
}
class Dog extends Animal{
	public void eat()
	{
		System.out.println("狗汪汪吃饭");
	}
}

class DuoleiDemo{
	public static void main(String[] args)
	{
		Animal a=new Cat();     //自动类型提升     向上转型
		a.eat();                //限制了对猫特有功能的访问
		//a.Catch()
		//Cat c=(Cat) a;          //向下转型  
		c.Catch();    
		//Dog d=(Dog) a;        //不可以同级转换
		//当不确定对象是不是属于同级还是上级,就像a不确定能不能转换成Cat时判断
		//判断复杂数据类型
		if(a instanceof Cat)
		{
			Cat c=(Cat) a;
		}
	}
}
多态应用
栗子一子父类
class Person
{	
/*要是有很多动物,这样定义会很麻烦
 	public void weishi(Cat c)
 	{
 		System.out.ptintln("人喂小猫吃饭");
 	}
 	public void weishi(Dog d)
 	{
 		System.out.ptintln("人喂小狗吃饭");
 	}
 */
 void weishi(Animal a)
 {
 	a.eat();
 	//若想调用子类对象中特有的属性,解决办法和多态类相同
 	if(a instanceof Cat)
	{
		Cat c=(Cat) a;
		c.Catch();
	}
 }
}
abstract class Animal{
	abstract void eat();
}
class Cat extends Animal{
	public void eat()
	{
		System.out.println("猫喵喵吃饭");
	}
	public void Catch()
	{
		System.out.println("小猫抓老鼠");
	}
}
class Dog extends Animal{
	public void eat()
	{
		System.out.println("狗汪汪吃饭");
	}
}

class DuoleiDemo{
	public static void main(String[] args)
	{ 
		Person p=new Person();
		/*Cat c=new Cat();
		Dog d=new Dog();
		p.weishi(c);
		p.weishi(d);
		*/
		p.weishi(new Cat());   //匿名对象  相当于Animal a=new Cat();用法和多态一样
		p.weishi(new Dog());    //匿名对象
		
	}
}
栗子二接口
class PC
{
	void use(USB U)
	{
		U.open();
		U.close();
		if(U instanceof Mouse)
	{
		Mouse m=(Mouse) U;
		m.click();
	}
		if(U instanceof Key)
	{
		Key k=(Key) U;
		k.print();
	}
	}
	/*要设置很多函数这样比较麻烦
	void use(Mouse m)
	{
		m.open();
		m.close();
		m.print();
	}*/
}
interface USB
{
	//提取共有的属性
	void open();
	void close();          //隐藏默认是public abstract所修饰
}
class Key implements USB{
	public void open(){
		System.out.println("插上键盘");
	}
	public void close(){
		System.out.println("拔出键盘");
	}
	//键盘特有功能
	void print(){
		System.out.println("敲击键盘");
	}
}
class Mouse implements USB{
	public void open(){       //因为使用了接口,所以权限应改成public
		System.out.println("插上鼠标");
	}
	public void close(){
		System.out.println("拔出鼠标");
	}
	//鼠标特有功能
	void click(){
		System.out.println("点击鼠标");
	}
}
class DuoleiDemo{
	public static void main(String[] args)
	{ 
		Pc p=new Pc();
		p.ues(new Mouse());		
		p.ues(new Key());	
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值