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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 354620815 中级黑马   /  2014-10-8 12:46  /  1944 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 354620815 于 2014-10-8 19:57 编辑
  1.     class Fu{
  2.             int num = 5;
  3.             Fu(){
  4.                     this.show();//这个this指向哪个对象
  5.                     System.out.println(this.num);//这个this又指向哪个对象
  6.             }
  7.             void show(){
  8.                     System.out.println("55");
  9.             }
  10.     }
  11.     class Zi extends Fu{
  12.             int num = 3;      
  13.             void show(){
  14.                     System.out.println(num);
  15.             }
  16.     }
  17.     public class Test1 {

  18.             public static void main(String[] args) {

  19.                     Fu f = new Zi();
  20.                     f.show();
  21.             }
  22.     }
复制代码


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

19 个回复

倒序浏览
本帖最后由 354620815 于 2014-10-8 19:58 编辑

{:3_68:}{:3_68:}
回复 使用道具 举报
  1. package pro.properties;


  2. class Fu{
  3.     int num = 1;
  4.     Fu(){
  5.             show();//被子类继承指向子 ,父类中new出的子类调用子类的show(),由于子类中show的num指向子类,父类中没有子类num,所以为默认值0 //只能这么解释了,可能感觉有点牵强,希望有人能把这里说的更透彻点
  6.             System.out.println("fu:"+this.num);//指向父类num
  7.     }
  8.     //这里show方法被子类覆盖,可以看成f.show()调用的是子类的show方法。子类中show方法中num指向子类num,所以打印值为3
  9.     void show(){
  10.         System.out.println("fu:"+"5");
  11.     }
  12. }
  13. class Zi extends Fu{
  14.     int num = 1;
  15. //    子继承父默认的构造函数
  16.     Zi(){
  17.             super();
  18.            
  19.     }
  20.     void show(){
  21.             System.out.println("zi:"+num);//这个num指子类对象,创建子类对象调用的就是子类num
  22.     }
  23. }
  24. public class TTT {

  25.     public static void main(String[] args) {

  26.             Fu f = new Zi();
  27.             f.show();
  28.             
  29.     }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 18643448863 于 2014-10-8 17:37 编辑
  1. class Fu{
  2.         int num = 5;
  3.         Fu(){
  4.                 this.show();//这个this指向哪个对象,show被复写,调用的是Zi中的show, System.out.println(num);num之前省略的是this.指向的是zi中的      num,但是这个时候zi中的num还没有被显示初始化所以显示的是默认初始化的O
  5.                 System.out.println(this.num);//这个this又指向哪个对象,这个是this是自己Fu里面的啊在执行构造函数钱,已经显示初始化 所以是5
  6.         }
  7.         void show(){
  8.                 System.out.println("55");
  9.         }
  10. }
  11. class Zi extends Fu{
  12.         int num = 3;        
  13.         void show(){
  14.                 System.out.println(num);
  15.         }
  16. }
  17. public class Test1 {

  18.         public static void main(String[] args) {

  19.                 Fu f = new Zi();
  20.                 f.show();
  21.         }
  22. }
复制代码


应该是这样,在初始化这块,可以给你看个东西,当时我可是弄了整整大半天,也没弄明白为什么,反正结论是记住了http://bbs.itheima.com/forum.php ... 4&page=1#pid1016458,终于把代码上传清楚了,差点没搞疯我,又疯了以为传好了一看又传错了。我可以说我没看懂你的题么,才明白你问的指向哪个对象是什么意思。就一个对象Zi,没其他对象啊。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
至始至终this都指向Zi类对象,因为new Zi();并没有new Fu()...不可能出现Fu类对象...
this指向调用它的对象,并不是在Fu类里定义了this,this就指Fu类的对象。
Zi有两个num一个是自己的,一个是Fu的,
如果在zi类空间使用num,就找自己的num,如果在父类空间使用num,就找fu的num
回复 使用道具 举报
354620815 发表于 2014-10-8 17:23
至始至终this都指向Zi类对象,因为new Zi();并没有new Fu()...不可能出现Fu类对象...
this指向调用它的对象 ...

那你说fu中构造函数中的打印语句打印的是几? 要是你说的this一直是zi的话 打印的应该是0 吧   
回复 使用道具 举报
354620815 发表于 2014-10-8 17:23
至始至终this都指向Zi类对象,因为new Zi();并没有new Fu()...不可能出现Fu类对象...
this指向调用它的对象 ...

哦我 看懂你说的话了,可能这块我也没明白 ,得想想。到低这个this是咋回事
回复 使用道具 举报
354620815 发表于 2014-10-8 17:23
至始至终this都指向Zi类对象,因为new Zi();并没有new Fu()...不可能出现Fu类对象...
this指向调用它的对象 ...

是呀 这个this还是指向fu的啊,被你弄蒙圈了,呵呵,:dizzy:
回复 使用道具 举报
这种问题很无聊,不要太纠结,我是混经验的。。。
回复 使用道具 举报
我可以说,今天所有回帖能得经验和黑马币都回在你这贴了么,怎么说呢,混经验是一部分,当你问的问题别人去解答,而没解答出来成为了别人的问题的时候,你如果知道 可以给下正解。我这人比较倔,有知识点要是弄不明白的话,绝对会想到地老天荒的。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 354620815 于 2014-10-8 18:15 编辑
18643448863 发表于 2014-10-8 17:28
那你说fu中构造函数中的打印语句打印的是几? 要是你说的this一直是zi的话 打印的应该是0 吧    ...

{:3_47:}{:3_47:}{:3_47:}
回复 使用道具 举报
18643448863 发表于 2014-10-8 17:33
是呀 这个this还是指向fu的啊,被你弄蒙圈了,呵呵,
  1. Zi(){
  2.                 System.out.println(this);
  3.         }
复制代码
  1. Fu(){               
  2.                 System.out.println(this);
  3.         }
复制代码


都是子对象,没必要骗你
回复 使用道具 举报
不可能,应该是5 3吧,或者你的代码弄错了
回复 使用道具 举报
说错了,没看清代码~
回复 使用道具 举报
354620815 发表于 2014-10-8 18:22
都是子对象,没必要骗你

你只要回答我 fu构造函数中的 那个 this.num的意思就好了,你告诉我,我就懂了。
回复 使用道具 举报
18643448863 发表于 2014-10-8 17:41
我可以说,今天所有回帖能得经验和黑马币都回在你这贴了么,怎么说呢,混经验是一部分,当你问的问题别人去 ...

赞一个,跟我一样,学过的东西没弄明白会让我很难受。我看到IO流遇到问题来论坛提问,顺带看到楼主提的问题,发现自己也是稍微有点蒙圈,然后就放下我自己的那个问题,去研究了1个多小时的楼主问题。也算弄明白了,算是巩固基础知识了。
回复 使用道具 举报
想了半天,还是不懂,求解释。
回复 使用道具 举报
18643448863 发表于 2014-10-8 18:52
你只要回答我 fu构造函数中的 那个 this.num的意思就好了,你告诉我,我就懂了。 ...

你复制我的代码 打印一遍你就懂了,在这里父类构造函数中的this调用了子类show方法
回复 使用道具 举报
,,,,,,,,,
回复 使用道具 举报
唐王潮 发表于 2014-10-8 19:55
你复制我的代码 打印一遍你就懂了,在这里父类构造函数中的this调用了子类show方法 ...

你说的我懂,我只是想问问楼主的想法,我发现我俩好像没在一个频道上。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马