多态

多态

概述

多态是继封装性,继承性之后,面向对象的第三大特征

定义

多态:是指同一行为,具有多个不同的表现形式

前提
  1. 要么有继承关系,要么有实现关系(二选一)
    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{
                  //表明你不是只猫
                  
            
            }

      }

}
posted @ 2020-11-25 22:45  任苗苗  阅读(98)  评论(0)    收藏  举报