【java】父类与子类的引用赋值关系
理清楚4个目标
- 父类引用(“名”)
- 父类对象(“实”)
- 子类引用
- 子类对象
理清楚几个操作
// 父类
public class parent{}// 子类
public class sun{}
- 父类引用指向父类对象
parent p1 = new parent();
- 子类引用指向子类对象
son s1 = new son();
3. 父类引用指向子类对象
parent p2 = new son();
- 子类引用指向父类对象(错误!)
son s2 = new parent();
5. 将第3点强制转换为由子类引用指向该子类对象
son s3 = (son)p2;
6. 对于强制类型转换,转换结果不能是【子类引用指向父类】,这显然是错误的,java会进行强制类型转换检查。例如
parent p4 = new parent();
son s4 = (son)p4; // 错误!
弄明白几个操作
对于父类引用指向子类对象的情况,此时,父类引用只能操作父类的部分。
也就是说
能操作什么,取决于引用的类型,当然,与修饰限定符有关,只能操作public
和protected
修饰符的东西
这也可以印证,为什么子类引用不能指向父类对象,因为,父类对象没有子类的方法,而子类引用又可以操作子类方法,就会造成错误。
父类引用子类对象的时候,只能使用父类的共有或者保护方法
可以看到,强制转换之后,就相当于子类引用指向了子类对象,也就是正常的情况了。
错误的做法,子类引用指向父类对象
对于多次继承,同样遵循父类与子类的关系
可以单独把继承链中的某两个类抽出来,看作父类和子类,然后关系就和上面说的一样了。
小结
整体来说,就说了几件事情
左边指向右边,有4种情况,其中【子类引用指向父类对象】是不允许的
然后,对于【父类引用指向子类对象】,可以变换为【子类引用转换为父类对象】
还有一些访问权限的事情,与访问修饰符有关。
【java】父类与子类的引用赋值关系相关推荐
- C++继承中父类和子类之间的赋值兼容
文章目录 1 C++继承中父类和子类之间的赋值兼容 1.1 父子间的赋值兼容 1.2 特殊的同名函数 1 C++继承中父类和子类之间的赋值兼容 1.1 父子间的赋值兼容 在公有继承的条件下,子类对象可 ...
- 父类和子类间引用要注意的问题
父类和子类间引用要注意的问题(索创java上第六章) 在发生数据隐藏的情况下(数据隐藏指子类中拥有与父类某属性相同的属性,父类的属性必须通过super才能访问到),父类和子类的声明引用的是同一个子类对 ...
- 父类对子类的引用(父类引用指向子类对象)
(有什么错误希望大家可以指出来,谢谢.) 使用前提:在父类与子类之间的关系中,调用的方法要在父类中定义. 例如:Animal a=new Dog(); Animal类是Dog类的父类,声明的是一个An ...
- java 父类获取子类对象_Java多态性详解 (父类引用子类对象)
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- java父类转子类_java中什么是继承,和继承的接口的关系?
继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...
- Java基础:子类与父类、子类与对象的关系、子类与父类同包时、不同包时的继承性
继承:是一种由已有的类创建新类的机制. 1.利用继承这个机制,可以先定义一个共有属性的一般类,根据这个类再分别定义具有特殊属性的子类,子类继承了一般类的属性和方法,并根据自己的需求创建新的属性和方法: ...
- java 父类转子类_Java多态,对象转型,和简单工厂模式。希望对您有帮助!
各位读者老爷们大家好鸭~图图又来了,今天我们要说一下"多态". 怎么理解这两个字呢?可以理解为同一个引用对象的不同表现形态,即将父类的引用指向子类的对象.这是比较官方的书面解释,大 ...
- java父类转换成子类_【转】java 父类与子类的转换
最近同事调的一个服务报错,查看后是日期之间转换出的问题.代码里是把 java.sql.Date 类型的对象 强制转换为 java.sql.Timestamp 类型的对象.报java.lang.Clas ...
- java 父类访问子类_java中父类访问子类变量
我们都知道,子类的方法可以访问父类的实例变量,这是因为子类继承父类就会获得父类的成员变量和方法:但是父类的方法水能访问子类的实例变量,因为父类根本无法知道它将被哪个子类继承,它的子类将会增加怎样的成员 ...
最新文章
- 中国地址住址五级以下
- 经典面试题: 为啥 ConcurrentHashMap 读操作不需要加锁?
- boost bind使用指南
- asp和php数据库怎么区分,asp与php的数据库有哪些区别
- 5.1.8 DELETE删除数据
- Android Studio 打开activity_main.xml不能正常显示
- 改进一个asp.net通用分页显示辅助类
- c++ 字符串拼接_python字符串零碎总结
- 直角三角形 纪中 1385 数学_斜率 英文题解
- 16个PLC入门基础知识,大学生学PLC就跟玩一样
- kali android命令大全,让你的安卓设备跑起kali——kali for android
- matlab 二维地图常用绘图函数用法(plot,fill,rectangle)
- 旋转卡(qia)壳 平面最远点对
- 自动摘要生成(三):词向量相似度与有效词含量
- 2014522420145238 《信息安全系统设计基础》第二次实验
- linux下安装php并配置运行环境
- 吴恩达深度学习课程-Course 2 改善深层神经网络 第三周 TensorFlow入门编程作业
- Go语言的反射三定律
- HTML样式中移动鼠标到指定位置改变光标形状
- redis.conf配置文件详解-0511-v1.0张雅慧
热门文章
- python2.7虚拟环境virtualenv安装及使用
- 49-今日交易总结.(2015.1.13)
- Flash中的SLC/MLC/MLC--基础
- 步骤菜单使用css3实现
- 设计模式读书笔记-----备忘录模式
- 继承之接口知识点和思考练习
- 如何在 C# 中用 SharpZipLib 进行 ZIP 压缩与解压(转)
- java 先序遍历_二叉树的前序中序后序遍历(java代码)
- java 编程原理_Java网络编程 -- 网络编程基础原理
- mysql动态sql是什么,mysql中动态sql的一次实际应用