先来简单介绍一下内部类的定义。所谓的内部类就是在一个类的内部进行其他的类的嵌套操作。内部类的结构看起来更为复杂,那为什么还要用内部类呢?原因有三:
1:内部类可以访问外部类的属性,包括私有属性,而外部类也同样可以访问内部类的属性(包括私有属性);
2 :内部类可以对同一包中的其他类隐藏起来;
3 :内部类还可以解决java中的单继承局限;
这就是内部类之所以存在的原因了。内部类与外部类的关系有以下几点:
1:对于非静态内部类而言,创建一个内部类对象需要依赖外部类的实例对象,在没有外部类的实例对象之前是不能创建内部类对象的;
2:内部类是一个独立的个体,他与外部类之间不是is-a关系;
3:内部类可之间访问外部类的元素(包括私有域),外部类不能直接访问内部类的元素;
4:外部类通过内部类引用来间接访问内部类元素。(即创建一个内部类对象,通过对象来访问)
创建非静态类的语法:
Outter.Inner in = new Outter().new Inner();
其中 new Outter()是创建外部类的实例对象。Outter.this.属性 / / 表示外部类当前对象的属性
内部类主要分为成员内部类、静态内部类、方法内部类和匿名内部类。下面对这几个类做一个简单介绍:
1:成员内部类,它可以访问外部类的静态属性,但是不能拥有自己的静态变量和方法。创建对象时要依赖外部类。
2:静态内部类,恰恰与成员内部类相反。静态内部类可以拥有自己的普通方法,普通属性但是不可以访问外部类的普通方法,普通属性,只可访问外部的静态方法与属性。他创建实例对象的语法如下:
Outter.Inner in = new Outter.Inner();
3:方法内部类:(可以看做是成员内部类)对于方法内部类来说,是不允许有任何的访问修饰符的(静态内部类可以加static与private修饰符,成员内部类可以加private修饰符(仅供外部类使用));对方法外完全隐藏,除该方法外,其余均不能使用;该内部类要想使用方法中的形参,则必须在方法的形参上加上final关键字(JPK1.8之后变为隐式final声明)
注:加final声明是因为方法的空间在栈上,而类对象在堆上,不能方法退出后类对象还可继续修改变量值,所以用final修饰,使其值不可更改。
4:匿名内部类:(方法内部类的特殊版本)匿名内部类必须继承一个类或者实现一个接口,他没有类名,所有没有构造方法;匿名内部类中也不能存在静态方法与变量。
以上就是我对内部类的一些粗浅见识,欢迎各位大佬指正!