多态
意义:同一个事物,由于条件不同,执行的结果不同。在Java中实质上指的同一引用类型,使用不同的实例而执行结果不同的。
注意:【1】同一个类型,一般指父类
【2】不同:不同的子类实例,同一个方法执行的父类或者子类方法;
实现多态规则:
【1】必须有继承关系,子类有一定要重写/实现父类的方法
【2】本质是 运行时 父类引用之类重写的方法
Super s = new Sub()
多态的实现形式
【1】父类型引用子类对象(本质)
//父类作为一引用类型 Super s = null; //父类引用子类sub1的重新方法 s= new sub1(); s.showInfo(); //输出子类sub1的方法 //父类引用子类sub2的重新方法 s=new sub2(); s.showInfo(); //输出子类sub2的方法
【2】父类作为方法形参实现多态
public void feed(Pet pet) { pet.getName() }
【3】父类作为方法的返回值实现多态
public Pet adoptPet(int type) { Pet pet = null; if(1 == type) { pet = new Dog(); }else if(2 == type) { pet = new Penguin(); }else if(3 == type){ pet = new Cat(); } return pet; }
类的转换
说明:在多态中存在两种类型装换。
一:自动类型装换 , 也称向上类型转换。子类可以自动转换成父类。
二:强制类型转换 ,也称向下类型转换。父类可以强制转换成子类。
三:必须是继承关系 。
个人理解 : 上类型转换 格式 : 父类 引用 = new 子类
其实该引用拥有子类的属性和方法(包括父类私有属性和方法) , 引用的上类型转换 规则只能使用成了父类的属性和方法和子类重写实例。
强制类型转换 格式 : 子类 新的引用= (子类) 引用 ;
满足继承关系可以强制类型转换, 引用可以使用子类的属性和方法必须要强制类型装换。其实创建对象本质是子类,通过转换方法使用子类;
判断对象的真实类型
关键字 : instanceof
instanceof 判断类型如下 类 或者 接口的实例
返回结果 = object instanceof class
参数:
返回结果:布尔类型,ture 或者 是 false
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
类的判断
Sub k = new Sub(); System.out.println(k instanceof Sub); //true System.out.println(k instanceof Super); //true System.out.println(k instanceof Object); //true
接口的实例的判断
Sub k = new Sub(); _Interface interf= k; //定义一个接口 System.out.println(k instanceof _Interface ); //true System.out.println(k instanceof interf); //true
来源:https://www.cnblogs.com/dedema/p/10776405.html