标签:
第三章 多态
polymorphism 多态 instance 例子
override 重载	constructor 构造器
ClassCastException 类型转换异常
upcasting 上抛	downcasting 向下转换
abstract 抽象
1.多态 是具有表现多种形态的能力的特征
同一个实现接口,使用不同的实例而执行不同的操作
2.子类向父类的转型
Dog dog=new Dog();
dog.eat();
Pet pet=new Dog();
pet.eat();
//Dog类继承自Pet类,调用的是子类重写的方法 而不是父类的方法
将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换.
此时通过父类引用变量调用的是子类覆盖或继承父类的方法,不是父类的方法
此时通过父类引用变量无法调用子类特有的方法
3.使用父类方法作为形参实现多态
//主人类
public class Master{
	private String name="";
	private int money=0;
	public Master(String name,int money){
		this.name=name;
		this.money=money;
	}
	
	public void feed(Pet prt){
		pet.eat();
	}
	public void feed(Dog dog){
		dog.eat();
	}
	public void feed(Cat cat){
		cat.eat();
	}
	//...省略代码
}
//测试类 领养宠物并喂食
public class Test{
	public static void main(String[] args){
		Master master=new Master("天命",100);
		Pet pet=new Dog("doge","柴犬");
	}
}
优势:减少代码量 提高代码的可扩展性和可维护性
4.使用父类作为方法返回值实现多态
//主人类
public class MasterP{
	private String name="";
	private int money=0;
	public Master(String name,int money){
		this.name=name;
		this.money=money;
	}
	//领养宠物
	public Pet getPet(int petType){
		Pet pet=null;
		if(petType==1){
			pet=new Dog();
		}else if(petType==2){
			pet=new Cat();
		}
		return pet;
	}
}
//Main方法
public class Test{
	public static void main(String[] args){
		int petType=input.NextInt();
		Master m=new Master();
		Pet pet=m.getPet(petType);
		if(pet!=null){
			//.......
		}
	}
}
实现多态的三个条件
	继承的存在
	子类重写父类方法
	父类引用变量指向子类对象
	
	
5.父类到子类的转换(向下转型)
当向上转型发生后,无法调用子类特有的方法\
将一个指向子类对象的父类引用,称为向下转型,此时必须进行强制类型转换
Dog dog=(Dog)pet;
dog.CatchBorn();
6.instanceof 运算符
向下转型时 如果没有转换为真实子类类型 就会出现类型转换异常
在强制转换之前通过 instanceof 运算符进行检查对象的真实性
if(pet instanceof Dog){
	Dog dog=(Dog)pet;
	
	使用 instanceof 运算符时,对象的类型必须和 instanceof 的第二个参数所指定的类或接口在继承树上有上下级关系,否则会编译报错
	
}
标签:
原文地址:http://www.cnblogs.com/swordtm/p/5965943.html