当前位置: 首页 > news >正文

向上转移和向下转型

向上转型

实际就是创建一个子类对象,将其当成父类对象来使用。格式:父类类型 对象名=new 子类类型();eg:Animal animal=new Cat();animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的装换

public class Main {public static void main(String[] args) {dog dog=new dog("az",1);dog.bark();dog.eat();System.out.println("=======");animal animal=new dog("ss",2);
//      animal.bark();调用不会成功animal.eat();}
}
class animal{public String name;public int age;public animal(String name,int age){this.age=age;this.name =name;}public void eat(){System.out.println(this.name+"正在吃饭...");}
}
class dog extends animal{public dog(String name,int age){super(name,age);}@Overridepublic void eat() {System.out.println(this.name+"正在吃饭.");}public void bark(){System.out.println(this.name+"叫");}
}

animal.bark()调用不成功是因为bark()只有子类有,父类没有

向上转型的优点:让代码实现更简单灵活;缺点:不能调用到子类特有的方法

向下转型

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用到子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转型

将上面的代码main改成如下:

public class Main {public static void main(String[] args) {dog dog=new dog("元宝",1);animal animal=dog;//向下转型dog.eat();//animal.bark();编译不成功,编译时编译器将animal当成animal对象处理,而animal类中没有bark方法//向上转型dog=(dog) animal;dog.bark();}
}

instanceof关键字

如果该表达式为true则可以安全转换

多态体现

 

public class Main {public static void main(String[] args) {rect rect=new rect();cycle cycle=new cycle();drawMap(rect);drawMap(cycle);}public static void drawMap(shape shape){shape.draw();}
}
class shape{//属性public void draw(){System.out.println("画图形");}
}
class rect extends shape{@Overridepublic void draw() {System.out.println("※");}
}
class cycle extends shape{@Overridepublic void draw() {System.out.println("圆");}
}


http://www.mrgr.cn/news/30591.html

相关文章:

  • 基于ZYNQ7035的PS-linux实现FTP服务器移植
  • 【网络安全】OSI网络安全体系结构
  • golang分布式缓存项目 Day5 分布式节点
  • 静态C语言函数调用关系生成工具-cflow
  • 【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】
  • React融合css
  • U盘显示未被格式化:深入解析、恢复策略与预防之道
  • 网络安全 DVWA通关指南 DVWA Stored Cross Site Scripting (存储型 XSS)
  • 蓝桥杯嵌入式客观题合集
  • 【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】
  • 英飞凌最新AURIX™TC4x芯片介绍
  • Lecture 4 Page Table
  • C++—string类接口与用法大总结(其中涉及STL基础)
  • 【Vmware16安装教程】
  • 登录后继续执行方法
  • pg入门3—详解tablespaces2
  • RK3568平台(网络篇)MAC地址烧录
  • 【LabVIEW】事件结构的用法
  • 消息队列-Kafka(概念篇)
  • 小琳AI课堂:强化学习初阶
  • OJ在线评测系统 前端开发设计优化通用菜单组件二 调试用户自动登录
  • JavaFX实现视频播放功能
  • SPI接口通信协议浅谈成都自动化开发
  • yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】
  • Linux 后台运行服务的全攻略:nohup、screen、tmux 和 systemd 的实战指南
  • (笔记)mac笔记本调节键盘速率