首页 > 代码库 > Effective Java之内部类

Effective Java之内部类

  Effective Java中对类的权限,接口等的要求,总结起来就是够用就行,不要赋予过多的访问权限,类的定义也是,如果某个类只会在类的内部使用,那就将该类定义为内部类吧。

  内部类分为四种:

  1、静态内部类:静态内部类就是在class前面多了static关键词的内部类,这种类和类的静态方法和静态变量一样,针对类本省进行操作,在静态内部类中可以随意访问其所在类的静态方法和静态变量。

  2、非静态内部类:和静态内部类相对于,其实在类内部定义的所有东西只是受到访问修饰符的限制,所以非静态内部类和类的非静态方法一样,可以访问其所在类的所有东西,只是在内部类中,this的含义可能有所改变。

  3、匿名类:匿名类是在创建类对象时才写类的方法体的一种定义类的方式,描述起来有点困难,下面给一个简单例子。

  4、局部类:局部类和非静态内部类是一样一样的,区别在于他们的作用范围,非静态内部类的作用范围是整个类,那么局部类的作用范围就是它所在的作用域了。

  下面先给一个非静态内部类的例子:

package alibaba;public class InnerClass {    public int i;    class HelloWorld {        public void setI(int k) {            i = k;        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        InnerClass ic = new InnerClass();        HelloWorld hw = ic.new HelloWorld();        hw.setI(3);        System.out.println(ic.i);    }}

  例子很简单,打印出来的结果就是3。

  下面再来一个匿名类的例子:

interface pr   {       void print1();   }     public class noNameClass    {       public pr dest()       {           return new pr(){               public void print1()               {                   System.out.println("Hello world!!");               }       };   }   

  最后返回的对象就是一个匿名内部类了。

  不过想想内部类在平时写代码的过程中用的却是不多,只是在HashMap的源码中看到过非静态内部类Entry,可能是平时在写代码的过程中没有注意吧。

Effective Java之内部类