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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 瑞雪雄起 中级黑马   /  2015-9-14 14:59  /  456 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

3 个回复

倒序浏览
cc3441251 来自手机 中级黑马 2015-9-14 15:15:51
沙发
调用的是成员函数,应该是看new s()的成员函数
回复 使用道具 举报
方法中的 this 代表具体的对象,虽然 S 中没有重写 P 的打印方法,但是实际上它继承过来了,当你调用 p.print 的时候 实际上最终调用的是 p 指向的对象,而它的指向是自己的子类对象,所以最终 this 代表的是具体的那个 S 子类对象, 所以打印输出的是 s
回复 使用道具 举报
我把上面的问题改一下:在P类中有属性x=0;
在S类中有属性x=1;
把PrintClassName()中的方法体改成System.out.println(this.x);
那你认为输出的结果是啥呢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马