3-5、多态性
语雀原文链接
文章目录
- 1、多态类型
- 2、上下转型
- 3、instanceof
1、多态类型
- 编译时多态:方法重载
- 在编译阶段就已经确定要调用哪个重载的方法
- 运行时多态:方法重写
- 具体调用哪个子类的方法要到运行的时候,结果才能确定,多态只针对行为(方法)
2、上下转型
- 向上转型
- 上转型对象只能调用父类定义了的变量和方法,子类新增的变量和方法访问不到的
- 但可以访问子类重写父类的方法。(多态只针对方法)
- 向下转型
- 向下转型对象可以访问父类里的属性、方法,
- 同时也可以访问子类新增的属性、方法。
public class Cat {public String name;public void eat(){System.out.println("Cat.eat()");}
}public class YeCat extends Cat{public int age;public void eat(){System.out.println("YeCat.eat()");}
}public class HomeCat extends Cat{public int age;public void eat(){System.out.println("HomeCat.eat()");}
}public class Main {public static void main(String[] aaa) {// 向上转型Cat yeCat = new YeCat();// 向上转型可以访问子类重写的方法yeCat.eat();// 报错,向上转型不可以访问子类新增的属性和方法
// System.out.println(yeCat.age);Cat cat = new HomeCat();// 向下转型HomeCat homeCat = (HomeCat) cat;homeCat.eat();System.out.println(homeCat.age);}
}
3、instanceof
- 用来检测某个对象是否是某个类的对象,结果是boolean值
Cat cat = new HomeCat();// 强转能成功HomeCat homeCat = (HomeCat) cat;// 类型强转错误,HomeCat cannot be cast YeCatYeCat yeCat = (YeCat) cat;if (cat instanceof HomeCat){HomeCat home = (HomeCat) cat;} else if (cat instanceof YeCat){YeCat ye = (YeCat) cat;}