多态

面向对象 多态

多态性:多态性是指允许不同 类的对象对同 一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同 名问题。
多态在程序设计中,为程序提供了 [可插拔性]

多态说白了就是,一种类型,多种形态,对象在创建时是父类形态,在使用时是子类形态。

package pm01;
/**
 * 宠物类
 *
 *
 */

public class Pet {
	private String name;
	private int age;
	private int health;
	private int love;
	
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}

	public int getAge(){
		return age;
	}
	
	public void setAge(int age){
		this.age = age;
	}
	
	
	public int getHealth(){
		return health;
	}
	
	public void setHealth(int health){
		this.health = health;
	}
	
	
	public int getLove(){
		return love;
	}
	
	public void setLove(int love){
		this.love = love;
	}
	
	public Pet(){
		
	}
	public Pet(String name,int age,int health,int love){
		this.name = name;
		this.age = age;
		this.health = health;
		this.love = love;
	}
	
	public void eat(){
		
	}


}

package pm01;
/**
 * 企鹅类 继承宠物类
 *
 *
 */
public class Penguin extends Pet{
	private String sex;
	public String getSex(){
		return sex;
		
	}

	public void setSex(String sex){
		this.sex = sex;
		
	}
	
	public Penguin(){
		
	}
	public Penguin(String name, int age, int health,int love,String sex){
		super(name,age,health,love);
		this.sex = sex;
	}
	
	public String toString(){
		return  "宠物的名字是:"+getName()+"\t年龄:"+getAge()+"\t性别"+getSex()+"\t健康值:"+getHealth()+"\t亲密度:"+getLove();
	}
	public void eat(){
		System.out.println("企鹅吃鱼,哦哦哦");
		setHealth(getHealth()+1);
		System.out.println("企鹅的健康值是:"+getHealth());
	}
	public void swmming(){
		System.out.println("企鹅游泳,哦哦哦");
		setHealth(getHealth()-2);
		setLove(getLove()+1);
		System.out.println("企鹅的健康值:"+getHealth()+"\t和主人的亲密度;"+getLove());
	}

}

package pm01;
/**
 * 
 * Dog类 继承宠物类
 * 
 *
 */

public class Dog extends Pet{
private String cloro;
	
	public String getCloro(){
		return cloro;
	}
	public void setCloro(String cloro){
		this.cloro = cloro;
	}
	public Dog (){
		
	}
	public Dog(String name,int age,int health,int love,String cloro){
		super(name,age,health,love);
		this.cloro = cloro;
		}
	
	public String toString(){
		return  "宠物的名字是:"+getName()+"\t年龄:"+getAge()+"\t健康值:"+getHealth()+"\t亲密度:"+getLove()+"\t颜色是:"+getCloro();
	}
	
	public void eat(){
		System.out.println("狗吃骨头,汪汪");
		setHealth(getHealth()+1);
		System.out.println("狗的健康值是:"+getHealth());
		
	}
	public void jie(){
		System.out.println("狗接飞盘,汪汪");
		setHealth(getHealth()-2);
		setLove(getLove()+1);
		System.out.println("狗的健康值是:"+getHealth()+"\t和主人的亲密度:"+getLove());
	}

}

package pm01;

public class Test {

	public static void main(String[] args) {
		Pet pet = new Penguin("qq",2,85,50,"雌");//子类赋值给父类。自动类型转换。向上转型。
		System.out.println(pet);
		pet.eat();
		pet = new Dog("大黄",5,90,95,"黄色");//子类赋值给父类。自动类型转换。向上转型。
		System.out.println(pet);
		pet.eat(); 多态的父类,拥有子类的多种形态,子类重写父类的方法。父类对象在调用方法时,运行子类的方法。
		
		
		if(pet instanceof Penguin){
			Penguin pen = (Penguin)pet;//父类强制转换成子类,需要加子类类型符号,向下转型。
			pen.swmming();
			
		}else if(pet instanceof Dog){
			Dog dog1 = (Dog)pet;//父类强制转换成子类,需要加子类类型符号,向下转型。
			dog1.jie();
		}

	}

}

子类赋值给父类。自动类型转换。向上转型。
父类强制转换成子类,需要加子类类型符号,向下转型。
多态:形成的必要因素:
1:必须有继承关系。
2:子类中需有方法的重写。
关键词:instanceof : 是否包含子类对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值