多态
多态
概述
多态是继封装性,继承性之后,面向对象的第三大特征
定义
多态:是指同一行为,具有多个不同的表现形式
前提
- 要么有继承关系,要么有实现关系(二选一)
2.父类的引用,指向子类的对象[格式体现]
3.方法的重写[意义:如果不重写,是无意义的]
多态的表现形式
多态的格式
父类类型 变量名 = new 子类类名();
变量名.方法名();
备注:父类类型指的是有继承关系的父类类型,或者实现的父接口的类型
如果使用多态方式调用方法时 ,首先检查父类当中是否有该方法,如果没有,则编译报错,如果有,执行的是子类重写后的方法
多态的好处
在实际开发中,父类类型作为方法的形式参数(不同于实际参数,),传递子类对象给方法,进行方法的调用时o,更能体现出多态的便利性和扩展性.
访问类中的成员变量有两种方式
1.直接通过对象名访问成员变量:等号左边是谁就优先找谁的,没有继续往上找,如果找不到会报错
2.间接通过成员方法访问成员变量,看成员方法属于谁,就优先用谁,没有继续往上找,如果找不到会报错
//定义一个父类
public class Fu{
int num = 10;
}
//定义一个子类
public class Zi extends Fu{
int num = 20;
}
//定义测试类
public class TestpolyFileldDemo01{
public static void main(String[] args){
//多态的表现形式
Fu fu = new Zi();
System.out.println(fu.num);//输出10;
}
}
引用数据类型的转型
多态的转型分为向上转型和向下转型;
向上转型
- 向上转型:多态本身就是子类类型向父类类型转型的过程,称为向上转型,父类引用指向子类对象.
使用格式:
父类类型 变量名 = new 子类类型();
比如:Animal animal= new Cat();
向下转型
*向下转型:父类类型向子类类型转换的过程 ,向下转型需要强制转换,且必须已经完成向上转型的才能实现向下转型.
使用格式:
子类类型 变量名 = (子类类型) 父类变量名;
比如: Cat cat = (Cat) animal;
转型异常
在进行向下转换的过程中,一不小心就出现啦java.long.ClassCastException类型转换异常
为了避免这种类型转换异常的发生,java提供啦instanceof关键字,对变量的类型进行校验
格式如下:
变量名 instanceof 数据类型
//如果变量是该类型的变量,返回true
//如果变量不是该类型的变量,返回false
备注:所以在类型转换之前,先校验是否是该类型的变量,如果是,可以进行转换,如果不是,就不进行转换.
代码演示:
public class Test{
public static void main(String[] args){
//向上转型
Animal animal = new Cat();
//向下转型
//先校验此animal是否是Cat类型变量
if(animal instanceof Cat){
//表明你是只猫
Cat cat = (Cat) animal;
cat.eat();
cat.catchMouse();
}else{
//表明你不是只猫
}
}
}

浙公网安备 33010602011771号