内部类

Posted licheee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部类相关的知识,希望对你有一定的参考价值。

为什么要使用内部类?

1、内部类方法可以访问定义它所在的作用域中的数据,包括私有的数据。

2、可以对同一个包中的其他类隐藏起来

3、想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

静态内部类与非静态内部类

静态内部类用static修饰,类与一个独立的类差别不大,除了位置放在外部类里面。与其他内部类相比,静态内部类与外部类联系也不大,只能访问外部类的静态变量和方法,但不能访问实例变量和方法。在类内部可以直接使用静态内部类,在外部,类似静态变量与静态方法,可以通过“外部类.静态内部类”使用,不生成外部类实例。

静态内部类的实现(内部类如何访问外部类的静态私有变量):每个内部类最后都会编译为一个独立的类,Java为外部类自动生成一个非私有的方法访问私有变量并返回。

非静态内部类没有static修饰,与静态内部类不同,它的实例总是与一个外部类实例相连的,因此需要先创建外部类实例,再创建内部类实例。除了静态变量和方法,非静态内部类可以直接访问外部类的实例变量和方法。但它自己不能定义静态变量和方法。可以理解为,内部类是与外部类实例相连的,而静态变量和方法是类的属性和方法,一般是独立使用的,在内部类中意义不大。如果真的需要静态变量和方法,就挪到外部类去吧。

非静态内部类的实现(内部类如何访问外部类的私有变量和方法):内部类有一个实例变量指向外部类对象,它在构造方法中被初始化,即指向已经生成的外部类对象。同时外部类生成了两个非私有静态方法,一个访问静态变量,一个访问静态方法。

方法内部类

顾名思义方法内部类就是在方法内部定义的类,只能在定义的方法内部使用,它对外部类的访问权限与所在的方法相同,即若方法是实例方法(非static),则可以访问外部类的实例变量和方法;若是静态方法,则只能访问外部类的静态变量和方法。方法内部类还可以直接访问方法的参数和方法中的局部变量,但局部变量和参数必须声明为final

匿名内部类

匿名内部类在创建对象的同时定义类。只能被使用一次,用来创建一个对象,它没有名字,没有构造方法,但可以调用对应的父类构造方法,也可以访问外部类的所有变量和方法。

public void sortIgnoreCase(String[] strs){

  Arrays.sort(strs, new Comparator<String>() {

    @Override

    public int compare(String o1, String o2) {

      return o1.compareToIgnoreCase(o2);

    }

  });

}

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

以上是关于内部类的主要内容,如果未能解决你的问题,请参考以下文章

内部类

内部类

Java内部类详解(含:成员内部类局部内部类匿名内部类静态内部类)

一个java内部类有几个分类?

内部类之静态内部类

java内部类的匿名内部类