Java 内部类、静态类内部类

问: 什么是内部类?

答: 内部类(Inner Class)就是在一个类的内部再定义一个类,与之对应包含内部类的类被称为外部类。

问: 为什么要将一个类定义在另外一个类内部呢?

答: 内部类主要作用如下:

  1. 内部类提供了更好的封装,可以被内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
  2. 内部类的方法可以直接访问外部类的所有数据,包括Private数据。
  3. 内部类所有实现的功能,使用外部类同样可以实现,只是有时候使用内部类更方便。

问: 内部类有几种?

答: 内部类可以分为以下几种:

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

 

成员内部类

 

静态内部类

  1、静态内部类不能直接访问外部类的 非静态成员,但可以通过 new 外部类().成员 的方式访问。

  2、如果外部类的 静态成员 与内部类的 成员 名称相同,可以通过“外部类.静态成员”的方式访问。

  3、创建静态内部类的对象时,不需要外部类的对象,可以直接创建:内部类 对象名 = new 内部类()

 

方法内部类

  由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用 访问控制 符和 static 修饰符

 

示例代码:

public class Outer {
    private int a = 11;
    static int b = 22;
    int c = 33;

    // 成员内部类
    public class Inner {
        public void test() {
            System.out.println("访问外部类中的a:" + Outer.this.a);
            System.out.println("访问外部类中的b:" + Outer.b);
            System.out.println("访问外部类中的c:" + c);
        }
    }

    // 静态内部类
    public static class SInner {
        public void test() {
            System.out.println("访问外部类中的a:" + new Outer().a);
            System.out.println("访问外部类中的a:" + b);
            System.out.println("访问外部类中的a:" + new Outer().c);

        }
    }

    // 成员内部类
    public void Show() {
        int score = 88;
        class SInner {
            public int getScore() {
                return score + 10;
            }
        }

        // 创建方法内部类的对象
        SInner si = new SInner();
        System.out.println("调用方法内部类的score:" + si.getScore());
    }

    public static void main(String[] args) {
        // 创建成员内部类的对象时,需要通过外部类的对象 out.new来创建 内部类对象
        Outer out = new Outer();
        Inner in = out.new Inner();
        in.test();

        // 创建静态内部类的对象时,可以直接创建内部类对象
        SInner si = new SInner();
        si.test();

        // 调用方法
        out.Show();
    }
}

 

posted @ 2018-12-02 11:42  Vincen_shen  阅读(375)  评论(0编辑  收藏  举报