`
RednaxelaFX
  • 浏览: 3019432 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

内部类的用法都还给书本了 = =

    博客分类:
  • Java
阅读更多
太久没用Java这么隐蔽的语法结构了。刚才翻Java语言规范的时候看到new关键字居然可以跟在Primary的后面,再一查,看到规范的15.9,才发现是用来生成内部类的实例的。像这样:
public class Outer {
    private String value;

    public Outer(String value) {
        this.value =  value;
    }
    
    public class Inner {
        public void printString() {
            System.out.println(Outer.this.value);
        }
    }
    
    public static void main(String[] args) {
        Outer o = new Outer("hello");
        Outer.Inner i = o.new Inner(); // instantiate inner class
        i.printString();
    }
}


想想觉得以前似乎是学过这语法……但肯定不是上课教的,而且肯定没怎么用过,不然怎么会忘得一干二净的 = =
分享到:
评论
5 楼 william_ai 2011-04-06  
内部类、静态内部类、匿名类,这三个家伙还是比较好玩的。
4 楼 RednaxelaFX 2010-12-24  
liaofeng_xiao 写道
liujinmarshall 写道
上课没教过,但这么用显然不好。
非静态的内部类在内部自己用用就好,跑出来吓唬人就不对了

呃,不理解这句话的真正意思,
Java集合中的Iterator什么的,都是非静态的内部类吧

是非静态的内部类,但同时也是私有的内部类因此从外部无法new,也就不可能让外部用户能用到new list.ListIterator()之类的奇怪语法了。
3 楼 liaofeng_xiao 2010-12-24  
liujinmarshall 写道
上课没教过,但这么用显然不好。
非静态的内部类在内部自己用用就好,跑出来吓唬人就不对了

呃,不理解这句话的真正意思,
Java集合中的Iterator什么的,都是非静态的内部类吧
2 楼 RednaxelaFX 2009-07-02  
liujinmarshall 写道
上课没教过,但这么用显然不好。
非静态的内部类在内部自己用用就好,跑出来吓唬人就不对了

哈哈,那是撒。记得以前见过,这么用内部类的一个作用是多个内部类实例共享一个外围类的实例的状态,就像这里的Outer.value。可以通过这种办法来实现一些封装。
当然,不用这种方法照样能达到封装效果,例如说把共享状态专门封装到一个别的什么类里面而不是用内部类的形式。
内部类一般都是由外围类来实例化,就不会用到这种诡异的语法。也难怪我会记不住这种用法的 OTL
1 楼 liujinmarshall 2009-07-02  
上课没教过,但这么用显然不好。
非静态的内部类在内部自己用用就好,跑出来吓唬人就不对了

相关推荐

Global site tag (gtag.js) - Google Analytics