多态
意义:同一个事物,由于条件不同,执行的结果不同。在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