-多态
1)什么是多态
一个父类的不同子类对象对父类中声明的方法的不同调用
2)为什么使用多态
父类引用调用方法,能够运行子类重写后的方法
3)实现多态的步骤
- 1、编写父类,定义要重写的方法
- 2、子类继承父类,重写父类中的方法
- 3、子类对象赋给父类引用,父类引用调用重写后的方法
ps:描述中的父类可能是接口,子类可能是接口的实现类
-父类类型强制类型转换为子类类型
1)为什么需要将父类类型转换成子类类型
父类类型无法调用到子类独有的成员
2)转换格式
(子类类型) 父类引用
//eg: 1.
Pet p = new Dog();
Dog d = (Dog)p;//p是Pet类型的引用
d.catchFly();
2.
Pet p = new Dog();
((Dog)p).catchFly();//强制转换只能在有继承关系的类之间
3)如何使用
3.1)转换后赋给子类引用
3.2)就地用子类成员
3.3)强制类型转换只能在有继承关系的类之间
ClassCastException(类型转换异常)
-instanceof 关键字
1)什么是instanceof
专门用于判断一个对象是否属于一个类型的关键字
2)为什么需要instanceof
在引用类型强制类型转换之前,进行判断,防止异常的发生
3)怎么使用instanceof
<引用> instanceof <类型>
运行结果是true 或者false,所以一般配合if使用
public class InstanceDemo {
public static void main(String[] args) {
Pet p = new Dog();
p.feed();//调用Dog的feed方法
Dog d = (Dog)p; //将P对象强转为Dog类
d.catchFly(); //调用Dog的catchFly方法
if(p instanceof Cat){//判断p对象是不是Cat类
Cat c = (Cat)p;
c.catchWish();
}else{
System.out.println("类型转换错误");
}
}
}