Java多态、向上转型、向下转型知识分享(讲解全面)
多态(方法的多态、对象的多态)
方法的多态
重写的多态(重要):子类继承父类,因此子类拥有父类属性和方法,如果子类重写父类方法,那么父类调用该方法的时候就会检查子类是否重写该方法,子类重写了就调用子类重写的方法,没有就调用父类自己的方法。
- 重载的多态:方法里的形参列表不同,在调用时穿惨给符合的方法,不同的是实参个数调用不同的方法
对象的多态(多态的核心)
- 一个对象的编译类型和运行类型可以不一致,也可以一直
- 编译类型在定义对象时,就确定了不能改变
- 运行类可以改变 例如: Animal animal = new Dog(); animal的运行类型变成了Dog,编译类型仍然是Animal
- 编译类型看=的左边,运行类型看=的右边(编译 javac 运行是Java)
向上转型
父类引用指向子类对象(重要)
语法:父类类型 引用名 = new 子类类型( );
- 向上转型调用方法的规则
- 可以调用父类中的所有成员(需遵守访问权限)
- 但是不能调用子类的特有的成员 ,因为在编译阶段,能调用哪些成员,是由编译类型来决定的
- 最终运行效果看子类(运行类型)的具体实现, 即调用方法时,按照从子类(运行类型)开始查找方法,然后调用,规则我前面我们讲的方法调用规则一致
- 重要!!属性没有重写!属性看编译类型(看下方代码)
public class PolyDetail02 {
public static void main(String[] args) {
//属性没有重写之说!属性的值看编译类型
Base base = new Sub();//向上转型
System.out.println(base.count);// ? 看编译类型 输出10
Sub sub = new Sub();
System.out.println(sub.count);//? 输出20
}}
class Base { //父类
int count = 10;//属性
}
class Sub extendsBase {//子类intcount = 20;//属性
}
向下转型
- 子类对象 引用名 = (子类类型)父类引用
- 只能强转父类的引用,不能强转父类的对象,所以必须先向上转型,才能向下转,因为得先向上转得到父类的引用
- 可以调用子类的所有成员,(向下转型可以得到子类的特有方法)
总结:
访问属性看编译类型,编译类型是谁就访问谁
访问方法看运行类型,运行类型是谁就访问谁
Java多态、向上转型、向下转型知识分享(讲解全面)的更多相关文章
- Java面向对象之多态(向上、向下转型) 入门实例
一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...
- “全栈2019”Java第九十章:内部类可以向上或向下转型吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...
- (转载)java多态(2)-------Java转型(向上或向下转型)
5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类), ...
- 1.12(java学习笔记)多态及向上、向下转型
一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...
- java 多态 向上 向下转型
向上转型 将子类对象当作父类对象 子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public vo ...
- java多态-向上转型和向下转型
向上转型:符合“is a”,是安全的,子类向上到父类,多余的属性和方法会丢弃 向下转型:不安全的,用instanceof提前判断一下,以免抛出异常 instanceof用法: result = obj ...
- java 向上,向下转型
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...
- java 向上转型 向下转型
//父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类 public class Parallelog ...
- java基础(十)之向上转型/向下转型
向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...
随机推荐
- linux 之 expect 交互操作(自动输入密码)
场景 需要实现执行一个命令,并自动输入密码. 实现 通过expect命令实现 spawn 交互程序开始后面跟命令或者指定程序expect 获取匹 ...
- hive 之 常用基本操作
show databases; -- 查看所有数据库 use 数据库; -- 进入某个数据库 select current_database(); -- 查看当前使用的数据库 show tables; ...
- 建造者模式(python)
建造者模式将复杂对象的构建与其表示分离.建造者模式主要有两个参与者:建造者(builder)和指挥者(director) 来自为知笔记(Wiz)
- react中create-react-app详情配置文档
https://facebook.github.io/create-react-app/docs/documentation-intro
- 老旧业务重构案例——IM系统如何设计
一年半之前刚来到这个团队,便遭遇了一次挑战: 当时有个CRM系统,老是出问题,之前大的优化进行了4次小的优化进行了10多次,要么BUG重复出现,要么性能十分拉胯,总之体验是否糟糕!技术团队因此受到了诸 ...
- php伪协议总结
本篇总结下一些封装协议,涉及的相关协议:file://.php://filter.php://input.zip://.compress.bzip2://.compress.zlib://.data: ...
- Git 基本操作指南
Git 基本操作指南 内容概要 这个作业属于哪个课程 2022面向对象程序设计 这个作业要求在哪里 2022面向对象程序设计寒假作业1 这个作业的目标 Git & Github 作业正文 如下 ...
- Chrome插件:提醒你正在摸鱼,摸鱼的时候知道自己在摸鱼,减少摸鱼的时间和频率。
stop-mess-around 项目介绍 减少摸鱼的时间和频率的Chrome插件:在上班/学习期间很容易下意识的打开摸鱼网站,插件帮助我们减少摸鱼的时间和频率,提高我们上班和学习的效率,节省时间用于 ...
- ManualResetEvent实现线程的暂停与恢复
背景 前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果.当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新. 分析这个需求,发现需要 ...
- How To Remove Systemd Service
Method systemctl stop [servicename] systemctl disable [servicename] rm /your/service/locations/[serv ...