参考文档:

内部类的应用场景

http://blog.csdn.net/hivon/article/details/606312

http://wwty.iteye.com/blog/338628

 

定义:

java允许在一个类中定义另外一个类,这就叫类嵌套。类嵌套分为两种,静态的称为静态嵌套类,非静态的又称为内部类

ps:lz一直以为内部类有四种,包括静态内部类。其实是错误的。内部类只有三种,均是非静态的

java基础之 内部类 & 嵌套类

使用嵌套类的优点:

  • 能够将仅在一个地方使用的类合理地组合。如果一个类可能只对于另外一个类有用,此时将前者组合到后者,可以使得程序包更加简洁
  • 增强封装性。假如由两个类A和B,B类需要使用A类中的成员,而恰好该成员又是仅类内部可见(private)的,如果将B定义为A的嵌套类,则B可以使用A的任何成员,而且B也可以声明为外部不可见(private),将B隐藏起来
  • 能够使代码可读性和维护性更强。嵌套的类代码相较于顶级类,更靠近它被使用的地方,方便查看

  嵌套类也属于类的成员,因此也可使用类成员的可视范围控制修饰词(public,protect,private),内部类能够使用其所在类的其他类成员,而静态嵌套类则不能使用其所在类的其他类成员。

 

Java中的内部类共分为三种

  成员内部类member inner class

  局部内部类local inner class

  匿名内部类anonymous inner class

静态嵌套类

  类定义时加上static关键字。

  不能和外部类有相同的名字。

  被编译成一个完全独立的.class文件,名称为OuterClass$InnerClass.class的形式。

  只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。

  生成静态内部类对象的方式为:

  OuterClass.InnerClass inner = new OuterClass.InnerClass();

  静态嵌套类使用代码:

package com.learnjava.innerclass;

class StaticInner
{
    private static int a = 4;

    // 静态内部类
    public static class Inner
    {
        public void test()
        {
            // 静态内部类可以访问外部类的静态成员
            // 并且它只能访问静态的
            System.out.println(a);
        }

    }
}

public class StaticInnerClassTest
{

    public static void main(String[] args)
    {
        StaticInner.Inner inner = new StaticInner.Inner();
        inner.test();
    }
}
静态内部类使用测试

相关文章: