黑马程序员技术交流社区

标题: 关于this. [打印本页]

作者: suifeng1987    时间: 2016-8-21 23:06
标题: 关于this.
老师不是说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.的方法??
作者: 李昌运    时间: 2016-8-21 23:11
路过,没上到这里
作者: lrwillinggerry    时间: 2016-8-22 00:21
看看引用的是父类还是子类
作者: 冬天有点冷    时间: 2016-8-22 00:48
a.print();   父类子类都有print的方法时,因为动态绑定,编译会看父类是否有这个方法,如果有,执行子类的print()方法,否则会报错.   this代表当前对象引用可以省略,系统默认会加上:  父类和子类中都有的变量,打印的是子类的20, 自己有就不用找父类了.
作者: 坚持努力wbj    时间: 2016-8-22 15:38
20
你是父类引用指向子类对象、
考虑输出是谁之前先考虑对象创建过程
创建子类对象时是先创建父类对象在创建子类对象
创建对象时是先属性(变量)初始化在执行构造方法
故这里的num的值先等于10,再等于20,
this代表当前对象
你可以理解了吗
作者: gaofengdage    时间: 2016-8-22 15:45
编译看父类,运行看子类,都有print方法,就不会用父类的 system.out.println(this.num),而是用子类的....
作者: a623562486    时间: 2016-8-22 16:00
也有点儿迷惑,进来看大神解答
作者: 阿卜    时间: 2016-8-22 17:53
非静态方法必须先创建对象,然后通过对象.方法名调用,this的“谁来调用我,我就代表谁”就代表的是调用这个方法的对象,例中this.name等效于对象名.name
作者: 胡eason    时间: 2016-8-22 21:21
加油!加油!加油!加油!
作者: suifeng1987    时间: 2016-8-23 08:05
冬天有点冷 发表于 2016-8-22 00:48
a.print();   父类子类都有print的方法时,因为动态绑定,编译会看父类是否有这个方法,如果有,执行子类的pri ...

明白了,就是前面的是引用,后面的是对象 ,是后面那个匿名对象调用的实际上,所以还是代表的是对象,谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2