父子对象之间的转换分为了向上转型和向下转型,它们区别如下:
- 向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换
- 向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换
模板:A a = new A();
首先确定a属于A类型,在new给A()分配内存时,需要先确认A()中的A属于一般类还是继承类,A()中的A属于一般类,那么会将A类中的变量和方法放入A()分配的本类内存中。
模板:A a = new B();
首先确定a属于A类型,在new给B()分配内存时,需要先确定B()中的B属于一般类还是继承类,B()中的B继承A,那么会将分配给B()的内存分为两块,一块是(super)父类空间,存放父类A的变量和方法,另一块是(this)本类空间,存放本类B的变量和方法
因为a属于A类型,所以能用A类(父类)中的变量和方法,无法使用B类(子类)中的变量和独有的方法,但是如果A类(父类)中的方法被B类(子类)重写了,那么a调用的方法将会是B类(子类)的方法,即a使用的是A类(父类)中的变量和A∩B=B(A与B共有,但是使用的是B)中的方法
成员方法:编译看左,左边有方法,运行看右,运行重写后的方法
B是A的子类,凡是A与B相同的成员方法都会被B重写。编译时(或写代码时)调用的是A类(父类),运行时(或使用代码)真正调用的是B类(子类)
成员变量:编译看左,运行看左
而对于成员变量来说,B类(子类)不会重写A类(父类)的成员变量,所以编译时(或写代码时)调用的是A类(父类),运行时(或使用代码)调用的也是A类(父类)
作者本人所有随笔仅为学习笔记,仅供参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)