java多态-向上转型和向下转型

向上转型:符合“is a”,是安全的,子类向上到父类,多余的属性和方法会丢弃

向下转型:不安全的,用instanceof提前判断一下,以免抛出异常

instanceof用法:

  result = object instanceof class

  result:布尔类型

  object:必选项,任意对象表达式

  class:必选项,任意已定义的对象类

  说明: 如果object是class或者其子类的一个实例,则instanceof运算符返回true,如果不是或者object是null,则返回false

 

public class AnimalDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal animal1 = new Dog("旺财");//向上转型
		Animal animal2 = new Cat("招财猫");
		animal1.eat();
		//animal1.sleep();因为向上转型,所以子类的sleep()丢弃了
		//父类的引用变量只能调用父类中有的方法,或者是子类重写父类的方法
		animal2.eat();
		//向下转型不安全,需要提前用instanceof判断一下,防止异常抛出
		if(animal2 instanceof Cat){
			System.out.println("111");
			Cat cat = (Cat)animal2;
			cat.sleep();
		}
		
	}

}

class Animal{
	private String name;
	public Animal(String name) {
		this.name = name;
	}
	public void eat() {//子类要重写
		System.out.println(name);
	}
}
class Dog extends Animal{
	public Dog(String name) {
		super(name);
	}
	public void eat() {
		System.out.println("吃狗粮");
	}
	public void sleep() {
		System.out.println("sleep");
	}
}
class Cat extends Animal{
	public Cat(String name) {
		super(name);
	}
	public void eat() {
		System.out.println("吃猫粮");
	}
	public void sleep() {
		System.out.println("sleep");
	}
}

 

posted @ 2018-02-07 13:01  biubiubiuo  阅读(236)  评论(0编辑  收藏  举报