(JAVA基础)多态的转型及转型注意事项

多态有时需要父类调用子类,这个时候就需要进行转型了!

转型的使用及转型的注意事项如下:

定义类跟方法

package stduy;

abstract  class Animal{
	abstract void eat();
}

class Dog extends Animal{
	public void eat() {
		System.out.println("啃骨头!");
	}
	public void lookHome() {
		System.out.println("看家!");
	}
}

class Cat extends Animal{
	public void eat() {
		System.out.println("吃鱼!");
	}
	public void catchMouse() {
		System.out.println("抓老鼠!");
	}
}

接下来

 * dog与a的区别在于,a能定义成其他的子类,而dog值能是Dog类型
 * 但是a不能调用Dog类中特有的方法。a只能调用Animal中的方法。

 * 但是可以向下转型,转成子类类型

Dog dog = new Dog();		

			Cat cat = new Cat();
			
			Animal a = new Dog();
			a.eat();
			Dog d = (Dog)a;
			d.lookHome();

再就是转型的时候的注意事项:

//向下转型前应该保证转型的健壮性

/* 
* 在进行子类特有方法使用时,要进行向下转型
* 转型之前一定要先判断,否则容易发生ClassCastException

* 判断引用类型,要使用一个关键字完成,关键字:instanceof

*/

			Dog dog2 = new Dog();
			method(dog2);
	public static void method(Animal a) {
		a.eat();
		if(a instanceof Cat) {
			Cat c = (Cat)a;
			c.catchMouse();
		}
		else if(a instanceof Dog) {
			Dog d = (Dog)a;
			d.lookHome();
		}
	}

猜你喜欢

转载自blog.csdn.net/u012313382/article/details/80923785