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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2013-3-22 12:40  /  1701 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张权 于 2013-3-22 12:47 编辑

  隐藏代码!
  interface A {}
  
  public class B {
      public A fun() {
         retrun new Haha();
    }
    private class AImpl implements A {}
    private class Haha implements A {}
  }
  
  B b = new B();
  A a = b.fun();
  //可以使用a,但外界不知道A是哪个具体的类型,这说明将来我们可以修改B类的fun()方法,使用另一个A类的实现,外界也不知道。
  问题: 根本就没有明白这怎么把代码给隐藏了? 明显的还是能够看到代码啊? 求详细解释??

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-22 14:34

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

5 个回复

倒序浏览
你这个代码我咋没看懂呢
回复 使用道具 举报
我手心里的宝 发表于 2013-3-22 12:53
你这个代码我咋没看懂呢

我也就是没看懂啊, 这段代码就是用来说明匿名内部类有隐藏的好处, 可是真没看出来哪里有隐藏代码的好处?
回复 使用道具 举报
其实不明白你的意思
   public A fun() {
         retrun new Haha();
    }
    private class AImpl implements A {}//这两个私有的,对外界来说,是看不到的,当通过public A fun()返回是A类的引用,比如这个类是别人写的,你并不知道其实际类型,
             但如果是你写的,如果你记得的情况下,你可以这样子做:Haha a =(Haba) b.fun();对于别人是看不到return这个语句,那就不能贸然这样子做了,有可能返回的实际类型不是Haha;
    private class Haha implements A {}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我觉得这里所说的隐藏,是两个私有的内部类的隐藏,因为内部类对外界是不可见的,如果你这两个实现A的类在一个方法中的话,甚至可对方法外的这个类B都是不可见的。这样说来,如果A中定义了抽象方法,那么在内部类中实现的话,外界是不可知的。个人理解,不知道能不能解决你的疑惑
回复 使用道具 举报
黄玉昆 发表于 2013-3-22 13:37
我觉得这里所说的隐藏,是两个私有的内部类的隐藏,因为内部类对外界是不可见的,如果你这两个实现A的类在 ...

恩, 解决了!!犯傻了, 其实private本来就是隐藏代码的, 但是正常类又不能有private修饰, 只有内部类可以, 那么这就是内部类把代码隐藏了, 而且还有, 当外界调用fun()方法时, 只知道返回的是A类型的, 但是到底是哪个实现类对象呢?外界也是不知道的, 这也是一种隐藏, 隐藏了实现!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马