A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suifeng1987 中级黑马   /  2016-8-21 23:06  /  711 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师不是说this.的意思是谁来调用我,我就代表谁嘛,那这个调用到底是指的调用this的方法,还是调用的方法的对象?那父类引用子类对象的情况,在父类A中有个变量num=10,在子类B中有个变量num=20,都有print方法,A a = new B(); B继承了A print方法是 system.out.println(this.num);主方法a.print(); 打印出来的是10还是20 ,如果20那谁来调用我的调用是不是指的是调用this.的方法??

9 个回复

倒序浏览
路过,没上到这里
回复 使用道具 举报
看看引用的是父类还是子类
回复 使用道具 举报
a.print();   父类子类都有print的方法时,因为动态绑定,编译会看父类是否有这个方法,如果有,执行子类的print()方法,否则会报错.   this代表当前对象引用可以省略,系统默认会加上:  父类和子类中都有的变量,打印的是子类的20, 自己有就不用找父类了.
回复 使用道具 举报
20
你是父类引用指向子类对象、
考虑输出是谁之前先考虑对象创建过程
创建子类对象时是先创建父类对象在创建子类对象
创建对象时是先属性(变量)初始化在执行构造方法
故这里的num的值先等于10,再等于20,
this代表当前对象
你可以理解了吗
回复 使用道具 举报
编译看父类,运行看子类,都有print方法,就不会用父类的 system.out.println(this.num),而是用子类的....
回复 使用道具 举报
也有点儿迷惑,进来看大神解答
回复 使用道具 举报
阿卜 中级黑马 2016-8-22 17:53:03
8#
非静态方法必须先创建对象,然后通过对象.方法名调用,this的“谁来调用我,我就代表谁”就代表的是调用这个方法的对象,例中this.name等效于对象名.name
回复 使用道具 举报
加油!加油!加油!加油!
回复 使用道具 举报
suifeng1987 来自手机 中级黑马 2016-8-23 08:05:11
10#
冬天有点冷 发表于 2016-8-22 00:48
a.print();   父类子类都有print的方法时,因为动态绑定,编译会看父类是否有这个方法,如果有,执行子类的pri ...

明白了,就是前面的是引用,后面的是对象 ,是后面那个匿名对象调用的实际上,所以还是代表的是对象,谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马