黑马程序员技术交流社区

标题: this关键字 [打印本页]

作者: 瑞雪雄起    时间: 2015-9-14 14:59
标题: this关键字
package pro.test1;
class P{       
public void printClassName()
{
System.out.println(this.getClass().getName());
}      
}
class S extends P
{
}
public class Test
{
public static void main(String[] args)
{
P p=new S();
p.printClassName();
}
}
为什么输出:pro.test1.S
作者: cc3441251    时间: 2015-9-14 15:15
调用的是成员函数,应该是看new s()的成员函数
作者: 刘凯1213    时间: 2015-9-14 15:31
方法中的 this 代表具体的对象,虽然 S 中没有重写 P 的打印方法,但是实际上它继承过来了,当你调用 p.print 的时候 实际上最终调用的是 p 指向的对象,而它的指向是自己的子类对象,所以最终 this 代表的是具体的那个 S 子类对象, 所以打印输出的是 s
作者: 瑞雪雄起    时间: 2015-9-14 16:35
我把上面的问题改一下:在P类中有属性x=0;
在S类中有属性x=1;
把PrintClassName()中的方法体改成System.out.println(this.x);
那你认为输出的结果是啥呢!




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