开课吧课堂:超类变量如何引用子类对象?
超类的一个引用变量可以被任何从该超类派生的子类的引用赋值。你将发现继承的这个方面在很多条件下是很有用的。例如,考虑下面的程序:
class RefDemo { public static void main(String args[]) { BoxWeight weightbox = new BoxWeight(3, 5, 7, 8.37); Box plainbox = new Box(); double vol; vol = weightbox.volume(); System.out.println("Volume of weightbox is " + vol); System.out.println("Weight of weightbox is " + weightbox.weight); System.out.println(); // assign BoxWeight reference to Box reference plainbox = weightbox; vol = plainbox.volume(); // OK, volume() defined in Box System.out.println("Volume of plainbox is " + vol); /* The following statement is invalid because plainbox does not define a weight member. */
// System.out.println("Weight of plainbox is " + plainbox.weight); }
}
这里,weightbox是BoxWeight对象的一个引用,plainbox是Box对象的一个引用。既然BoxWeight是Box的一个子类,允许用一个weightbox对象的引用给plainbox赋值。
理解是引用变量的类型——而不是引用对象的类型——决定了什么成员可以被访问。
也就是说,当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分。这是为什么plainbox不能访问weight的原因,甚至是它引用了一个BoxWeight对象也不行。
仔细想一想,这是有道理的,因为超类不知道子类增加的属性。这就是本程序中的最后一行被注释掉的原因。
Box的引用访问weight域是不可能的,因为它没有定义。尽管前面部分看起来有一点深奥,它是很重要的实际应用。
开课吧课堂:超类变量如何引用子类对象?相关推荐
- java超类 子类_Java超类引用子类对象的规律
首先,对于JVM实现引用的一个机制是:类实例的引用就是指向一个句柄(handle)的指针,这个句柄就是一堆指针:一个指针指向一块从java堆中为分配出来内存空间:另一个指针指向一张表(实际上这个表格也 ...
- java多态性详解——父类引用子类对象
Java的多态性 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作 ...
- java父类引用子类属性_Java多态性详解——父类引用子类对象
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- java 父类获取子类对象_Java多态性详解 (父类引用子类对象)
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- java 父类引用子类对象_java 父类引用指向子类对象
1. 无论是泛型还是普通父类引用指向子类对象,父类引用可见范围都是父类自己的变量或函数 2. 说明见注释 代码如下:父类 package com.atguigu.spring.beans; publi ...
- java 父类引用子类对象_java多态,如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 C ...
- java 调用父类的变量_java创建子类对象设置并调用父类的变量操作
通过子类调用父类的变量,有两种方法: 1.把父类的变量设置成public: package triangle.opengl.wlz.stu.childusefathervariable; import ...
- java的子类对象_在Java中将子类对象分配给超类对象时会发生什么?
在Java中将一种数据类型转换为另一种数据类型称为转换.如果将较高的数据类型转换为较低的数据类型,则称为窄化(将较高的数据类型值分配给较低的数据类型变量).char ch = (char)5;如果将较 ...
- 父类引用指向子类对象详解
父类引用指向子类对象 父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal ani ...
最新文章
- 用Python统计分析290种零食,谁能唤起80、90后的童年回忆?
- [ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例
- 【笔记】springboot使用Spring-data-jpa
- 你还在为文件读写而烦恼?Python已经轻松帮你解决了(建议收藏)
- NGINX最新API管理模块已可用,针对内部和外部API进行了优化
- 从入门到深入Fiddler 2 (二)
- jdbc oracle clob blob long类型数据
- 通过程序得到数据库表之间的关联关系
- Android 字体ttf文件下载(含github下载地址)
- 诺顿企业版 V11.0
- Kaspersky Security Center部署
- 地缘剧本杀 (十一):疗伤(原创小说连载,内含语音)
- 如何举报YouTube视频和评论
- 大学竞赛经历分享之微信小程序应用开发赛(1)
- VScode中使用platformIO开发,编译时找不到自己的源文件(报错信息:undefined reference to )
- c语言windows程序设计-在windows中使用printf,Windows编程(4)-在Windows中使用printf
- c盘清理缓存垃圾路径
- 飞书接入ChatGPT,打造属于自己的智能问答助手
- c#上位机开发(三)——简易串口发送数据
- alert导致ajax数据交互问题,用ajax获得数据,可是页面显示的时不加个alert就显示不出来,随意加个alert就可以 解决办法...
热门文章
- [转载] Python numpy insert()、 delete()、append()函数的用法
- [转载] python并行处理任务_Python 并行任务技巧
- 39. 组合总和 ,40. 组合总和 II,216. 组合总和 III
- 说一下syslog日志吧~~~
- Winfrom窗体无法关闭问题--检查是否存在重写
- html标记语言 --超链接
- wpf的控件style
- 【转】移动Web开发-点击事件及页面滚动
- 转:Web页面通过URL地址传递参数常见问题及检测方法
- 【学习笔记】卡尔曼滤波中的协方差矩阵