java 内部类详解

1、内部类的好处
内部类的作用就是为了访问外部类中的成员变量
访问内部类本身的成员变量可用this.属性名,访问外部类的成员变量需要使用Out.this.属性名


//静态内部类,
public class InnerClassDemo {
//①public String name = "张三" ;
//②public static String name = "张三" ;
public static class SonInnerClass{
private String name = "李四";//内部类变量
public void method(){
String name = "王五";//成员变量
System.out.println(name);
System.out.println(this.name);
//①System.out.println(InnerClassDemo.this.name); 不能访问外部类的非static变量
//②System.out.println(InnerClassDemo.name); 这样就可以访问外部类的成员变量
}
}
}

new 静态内部类
SonInnerClass son = new InnerClassDemo.SonInnerClass();
son.method();


2、私有内部类,只是为了服务方法使用。
如果一个内部类只希望被外部类中的方法操作,那么可以使用private声明内部类。
这个内部类就不能再外面new对象了,受外部类控制了。因为使用了private修饰的内部类

class Out {
private int age = 12;

private class In {//注意这个地方是private, 这样写是错误的---> Out.In in = new Out().new In();
public void print() {
System.out.println(age);
}
}
public void outPrint() {
new In().print();
}
}

public class Demo {
public static void main(String[] args) {
Out out = new Out();
out.outPrint();
}
}


3、方法内部类,方法内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
public class MethodInnerClass {

private static String name = "123";
public void method(final String name){
class SonMethodInnerClass{//注意这个地方不能有修饰符
public void SonMothod(){
System.out.println(name);
}
}
new SonMethodInnerClass().SonMothod();
}
}


为什么在Java中需要内部类?总结一下主要有以下四点:

  1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整,

  2.方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏。

  3.方便编写事件驱动程序

  4.方便编写线程代码

  个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。

 

 


最后补充一点知识:关于成员内部类的继承问题。一般来说,内部类是很少用来作为继承用的。但是当用来继承的话,要注意两点:

  1)成员内部类的引用方式必须为 Outter.Inner.

  2)构造器中必须有指向外部类对象的引用,并通过这个引用调用super()。这段代码摘自《Java编程思想》

posted @ 2016-07-24 10:59  下一站你要去哪里  阅读(127)  评论(0)    收藏  举报