多态
- 定义:是指同一行为,具有多个不同表现形式
- 必要条件:
继承或者实现
方法的重写【覆盖】
父类引用指向子类对象
多态的实现方式
重写
重写和重载
重写:父子类间同名同参数的方法,不同的实现
重载:同名不同参数的方法,与返回值无关
父类类型 变量名 = new 子类对象;
调用:当使用多态方式调用方法时,首先检查父类中是否有该方法,
如果没有,则编译错误;如果有,执行的是子类重写后方法。
变量名.方法名
类的定义与之前的相同,包括接口,抽象类的覆盖等等,都没有变化。
主要还是在main方法中的调用
父类 Animal 抽象方法 eat(){}
子类 Cat 成员方法 eat(){}
子类 Dog 成员方法 eat(){}
测试类
public class Test {
public static void main(String[] args) {
多态形式,创建对象
Animal a1 = new Cat();
// 调用的是 Cat 的 eat
a1.eat();
// 多态形式,创建对象
Animal a2 = new Dog();
// 调用的是 Dog 的 eat
a2.eat();
showFuEat(fu)
}
public static void showFuEat(Fu fu){
fu.eat();
}
}
接口
抽象类和抽象方法
引用类型的转换
- 转型原因
- 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥
有,而父类没有的方法。
- 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥
- 转型定义格式
- 向上转型
- 父类类型引用子类对象
父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();
- 父类类型引用子类对象
- 向下转型
- 父类类型向子类类型向下转换
子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;
- 父类类型向子类类型向下转换
- 向上转型
- instanceof 关键字,给引用变量做类型的校验
- 变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。
- 变量名 instanceof 数据类型