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,可能是平时在写代码的过程中没有注意吧。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。