今日掌握:
多态的概念
引用类型间的强转
多态的三种使用场景
instanceof关键字的语法和使用
引言:父类引用的多种具体值的不同形态
概念:父类引用可以指向不同的子类对象
代码格式:
父类引用名=子类对象
父类类名 引用名=new 子类类名
使用要求:
1:实际创建的是子类对象
2:优先执行子类内容
3:无法访问子类独有内容(原因是编译不通过)
4:编译器关注的是引用类型,解释器关注的是实际对象类型
左边决定能做什么,右边决定谁去做
引用类型间的类型转换
自动类型转换
父类引用=子类对象;
强制类型转换
子类类型=(子类类型)父类引用
子类类名 引用名 =(子类类名)父类引用名;
只能转向父类引用原本指向的子类类型
代码演示:
Animal a1=new Dog();
Cat c=(Cat)a1;
代码解释:
a1类型为Animal,满足语法规范,编译通过,但是a1的实际对象类型是Dog,不玩组执行逻辑,所以运行报错
同级子类之间无法进行类型强转
多态的应用场景
1:用于容器,将容器(变量、数组、集合等)类型声明为大类型,则内部可以存放不同的小类型对象
2:用于参数,将方法形参类型声明为大类型,则传入实参时可以为不同的子类对象
3:用于返回值,将方法返回值类型声明为大类型,,则可以实际return不同的子类对象
接收返回值时,也应该使用父类引用类型接收
instanceof关键字
基本类型比较值,引用类型比较地址
判断引用类型是否与指定类型兼容
引用名 instanceof 类名
使用规范:
1:子类对象可以被父类类型兼容
2:父类对象无法被子类对象兼容
3:统计子类之间无法兼容
大类型可以兼容小类型,但是小类型无法兼容大类型
多态的优势:
1:更加贴合显示逻辑
2:提高代码扩展性
3:减少代码冗余