博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
课后作业
阅读量:7221 次
发布时间:2019-06-29

本文共 829 字,大约阅读时间需要 2 分钟。

动手实验1:

当通过super()方法调用父类的构造方法时,该方法必须是子类构造方法的第一句。

 

 

 

 

动手实验2

 

类型转换:

 

问题如下图:

回答:第二句会出错,第四句会出错。原因:虽然第一句已经把子类对象d赋值给父类对象m,但是m仍旧是父类的对象,所以用父类对象再次给子类对象赋值时需要加上强制类型转换。第四句是因为同级不同的子类之间不能互相赋值。

动手实验三:

问题:下面的代码输出什么结果?为什么?

输出结果:100  200  200  200  201

原因:前俩个结果是因为前俩个对象全是父类引用指向父类对象,子类引用指向子类对象,因此输出100 200然后子类对象赋值给父类对象,所以该父类对象是父类引用指向子类,此时,子类中对父类方法有覆盖,所以该父类对象调用子类中重新定义的方法,所以输出200,但是不管子类对父类中属性是否覆盖,该父类对象仍然引用自身原有的属性,所以parent.myValue++是对父类中的myValue进行++,后一句加上了强制类型转换,所以是对子类中属性进行操作,所以最后输出的是201.

引用规则:

一.当父类引用指向子类对象时:

1、若子类覆盖了某方法,则父类引用调用子类重新定义的新方法

2、若子类未覆盖某方法,则父类引用调用父类本身的旧方法

3、若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性

4、若子类未覆盖某属性,则父类引用调用父类本身的旧属性

5、父类引用不能访问子类新定义的方法

二.子类引用指向自身对象时:

1、若子类覆盖了某方法,则子类引用调用子类重新定义的新方法

2、若子类未覆盖某方法,则子类引用调用父类本身的旧方法

3、若子类覆盖了某属性,则子类引用调用子类重新定义的新属性

4、若子类未覆盖某属性,则子类引用调用父类本身的旧属性

5、子类引用可以访问子类新定义的方法

 

 

 

 

转载于:https://www.cnblogs.com/zhangliqiangvictory/p/7810093.html

你可能感兴趣的文章
python 发送邮件
查看>>
在凡客四个月的工作总结
查看>>
Qt颜色下拉框
查看>>
31、springboot与任务
查看>>
【转】 一个fork的面试题
查看>>
20131108
查看>>
django.http.request中HttpRequest对象的一些属性与方法
查看>>
英文对应解释
查看>>
Robotics ToolBox机械臂仿真
查看>>
linux添加环境变量
查看>>
【uva 1312】Cricket Field(算法效率--技巧枚举)
查看>>
VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法
查看>>
【ora-err】ORA-03113: end-of-file on communication channel
查看>>
00.索引-综述
查看>>
strcpy
查看>>
AC3 Rematrix
查看>>
C#之Windows Form Application与attribute
查看>>
函数与指针分析实例
查看>>
爬虫:pycurl模块的使用说明
查看>>
Halcon算子翻译——try
查看>>