课后作业
Posted BadGuyhaha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课后作业相关的知识,希望对你有一定的参考价值。
动手实验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、子类引用可以访问子类新定义的方法
以上是关于课后作业的主要内容,如果未能解决你的问题,请参考以下文章