Java面向对象----多态概念,对象上下转型

概念:同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果

多态存在的三个必要条件

  •   需要存在继承和实现关系
  •   同样的 方法调用而执行不同操作,运行不同的代码(重写操作)
  •   在运行时父类或者接口的引用变量可以引用其子类的 对象
package com.tanlei.newer;

public class AnimalDemo {
	public static void main(String[] args) {
          Animal animal=new Dogg("哈哈");
          Animal animal2=new Cat("花花");
          animal.eat();
          animal2.eat();
	}
}

class Animal {
	private String name;

	public Animal(String name) {
		this.name = name;
	}

	// 这是一个通用方法
	// 只是告诉其子类去实现它
	public void eat() {

	}

}

class Dogg extends Animal {

	public Dogg(String name){
		super(name);
	}
	public void eat() {
		System.out.println("狗啃骨头");
	}
}

class Cat extends Animal {
	public Cat(String name){
		super(name);
	}
	public void eat() {
		System.out.println("猫吃鱼");
	}
}

对象上下转型

向上转型  子类 --->父类

Animal animal=new Dogg("哈哈");//向上转型
 //向上转型  安全  但可能会导致子类的方法丢失
//父类的引用变量只能调用父类中有的方法或者子类重写的方法

  

向下转型   父类--->子类

 //向下转型  不安全
         if(animal2  instanceof Cat) {
        	 Cat cat=(Cat)animal2;
        	 cat.sleep();
         }

  

instanceof

用法:

  

object instanceof   class    / /object是class或其子类的一个实例

  

动态绑定

编译前绑定   (静态绑定)

Person.sayHi();

  

运行时,根据变量实际引用的对象类型决定调用哪个方法(动态绑定)

Person p =new Teacher();

o.sayHi();

猜你喜欢

转载自www.cnblogs.com/tanlei-sxs/p/9943121.html
今日推荐