1、内部类
1.1 内部类是什么?
所谓内部类,就是在一个类的内部还有一个类的嵌套操作。
public class Test
{
private int m=6;
class InnerTest
{
private int n=5;
public void print()
{
System.out.println("inner say: "+m);
}
}
public void say()
{
InnerTest innerTest = new InnerTest();
System.out.println("test say: "+ innerTest.n);
}
}
public static void main(String[] args) {
Test test = new Test();
InnerTest innerTest = test.new InnerTest();
innerTest.print();
test.say();
InnerTest innerTest2 = new Test().new InnerTest();
innerTest2.print();
}
1.2 内部类的优点
内部类与外部类可以方便的访问彼此的私有域(包括私有方法、私有属性)。
内部类是另外一种封装,对外部的其他类隐藏。
内部类可以实现java的单继承局限。
1.3 成员内部类
成员内部类内部不允许存在任何static变量或方法 正如成员方法中不能
有任何静态属性 (成员方法与对象相关、静态属性与类有关)。
1.3 静态内部类
关键字static可以修饰成员变量、方法、代码块、其实还可以修饰内部类,使 用static修饰的内部类我们称之为静态内部类,静态内部类和非静态内部类之间存 在一个最大的区别,非静态内部类在编译完成之后会隐含的保存着一个引用,该 引用是指向创建它的外围类,但是静态类没有。没有这个引用就意味着:
1.静态内部类的创建不需要依赖外部类可以直接创建。
2.静态内部类不可以使用任何外部类的非static类(包括属性和方法),但可以存在自己的成员变量。
1.4 方法内部类
方法内部类顾名思义就是定义在方法里的类 。
1.方法内部类不允许使用访问权限修饰符(public、private、protected)均不允许。
方法内部类对外部完全隐藏,除了创建这个类的方法可以访问它以外,其他地方均不能访问(换句话说其他方法或者类都不知道有这个类的存在)方法内部类对外部完全隐藏,出了创建这个类的方法可以访问它,其他地方均不能访问。
方法内部类如果想要使用方法形参,该形参必须使用final声明(JDK8形参变为隐式final声明)
2、匿名内部类
匿名内部类就是一个没有名字的方法内部类,因此特点和方法与方法内部类完全一致,除此之外,还有自己的特点:
1.匿名内部类必须继承一个抽象类或者实现一个接口。
2.匿名内部类没有类名,因此没有构造方法。