3-5、多态性
2023-12-13 04:42:38
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 YeCat
YeCat yeCat = (YeCat) cat;
if (cat instanceof HomeCat){
HomeCat home = (HomeCat) cat;
} else if (cat instanceof YeCat){
YeCat ye = (YeCat) cat;
}
文章来源:https://blog.csdn.net/sinat_35615296/article/details/134955472
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!