您的位置:首页 > 其它

关于在外部对内部类进行实例化和引用

2016-10-06 16:47 260 查看
有些时候在写一些小的项目或者demo时,为了方便或者逻辑上归类往往定义一些内部类,比如一些小型的model,各种Adapter、BroadcastReceiver等等。

类似结构:

class A{
static class B{
public void put(){
System.out.println("abc);
}
}
}


此时,对B进行实例化这样:

A.B b1 = new A.B();
b1.put();

此时类B作为类A中的静态成员,可以以A.B的形式对B进行访问而不必实例化A。 这种形式的优点是访问方便,清晰明了,不必持有A的引用;缺点是不利于在A与B之间进行数据传递。

例如:

class A{
String str = "abc";
static class B{
public void put(){
System.out.println(str);
}
}
}



此时将报错Cannot make a static reference to the non-static field str,即静态的成员不能持有非静态的成员的引用。 可以将str改为static,将B要访问的成员都改为static,但这会导致static的滥用违背面向对象的思想,还可能会造成内存泄漏。

另一种用法是将class B的static 修饰去掉

class A{
class B{
public void put(){
System.out.println("abc");
}
}
}



这样实例化
A a1 = new A();
A.B b1 = a1.new B();
b1.put();

先取得A的引用,在借由A的实例对B进行实例化,由于此时B作为A的成员,因此B中可自由访问A类的其他成员。这种情况下A与B之间联系密切,实例化B必须取得A的引用。

 

当然,在项目规模较大而且考虑到后续的拓展,还是尽量采用合适的架构和写成独立的类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐