Java 多态

多态:父类的引用可以指向子类型的对象。


例如:animal是父类Animal类引用,它指向了子类Bird的对象

Animal aniaml = new Bird();

多态中方法调用的规律:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,就会报编译错误;如果父类中有该方法,则再去调用子类中该同名的方法。


如果想调用子类中有而父类中没有的方法,需要进行强制类型转换。因为当父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法,这时需要进行向下类型转换,将父类引用转换为子类引用。


下面通过一个demo来展示:

class Animal {
	public void run() {
		System.out.println("Animal is runing!");
	}
}

class Dog extends Animal {
	@Override
	public void run() {
		System.out.println("Dog is runing!");
	}
}

class Bird extends Animal {

	@Override
	public void run() {
		System.out.println("Bird is runing!");
	}
	
	public void fly(){
		System.out.println("Bird is flying!");
	}
}

/****************测试类*********************/
public class PolyTest1 {

	
	public static void main(String[] args) {
		
		/*向上类型转换(子类对象赋给父类对象),不需要强转,很符合现实环境,鸟是动物很正常!*/
		Bird Bird = new Bird();
		Animal animal = Bird;
		/*输出"Bird is runing!"【首先判断出父类中有run()方法,然后再调用子类中同名的方法得到的输出结果】*/
		animal.run();
		
		/*向下转换(父类对象赋给子类对象),需要强转,这个也符合现实环境,动物不一定是鸟,所以要强转为鸟的类型*/
		Animal animal1 = new Bird();
		Bird c = (Bird) animal1;
		/*输出"Bird is runing!"*/
		c.run();
		/*输出"Bird is flying!"*/
		c.fly();
		
		
		Animal a = new Bird();
		/*编译错误,用父类的引用调用父类不存在的方法而发生错误【Bird中虽然有fly()方法,但是Animal中没有,a是Animal的引用,所以找不到该方法】*/
		//a.fly();
		
		Animal a2 = new Bird();
		/*向下转换也是有条件的:父类星的引用必须指向子类的对象【Animal的引用a2指向的是Bird类的对象,现在要转换为Dog,可能吗?】*/
		//Bird c2 = (Dog) a2;
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值