请问怎么解释这个结果。
6条回答 默认 最新
- 菜瓜3306 2017-10-14 04:46关注
打印了两条记录,我一个一个跟你分析一下:
首先第一个:
打印的是子类的run方法,这个很好理解的,首先,你new 的是子类的对象,调用的是父类的run2()方法,此时,run2()方法中的this其实是子类的对象,你可以打印一个System.out.println(this.getClass()),确认一下,所以,子类对象就会看它自己有没有run()方法,很明显是有的,你可以理解为这是方法的重写,所以调用的就是子类的run()方法;
然后第二个问题:
为什么上面描述的this是子类对象,但是得到的却是父类的值呢?其实.run2()这个方法是属于父类的,父类是无法获得子类的属性的,方法可以重写,但是属性没有重写这个概念,当你调用this.(成员属性)的时候,查找属性值顺序:方法,成员,然后会去这个方法所在类的父类去找,就近原则返回结果,...但是,要注意的是,在父类里面是无法直接获得子类的成员变量的,要想获得,就要通过创建对象的方式来获取下面给你一段代码,你可以用我的代码去实验一下:
public class Test {
/*public static void main(String[] args) {
Child child=new Child();
child.run2();
}*/
public static void main(String[] args) {
Man m=new Child();
System.out.println(m.age); //获得的是Man的属性值
m.run(); //调用子类的方法
}
}class People{ int age=100; public void run() { System.out.println("人类执行了"); } } class Man extends People{ public void run() { System.out.println("父类执行了"); } public void run2() { this.run(); System.out.println(this.getClass()); System.out.println(this.age); } } class Child extends Man { int age = 10; public void run() { System.out.println("子类执行了"); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?