内部类:类存在于其他类内部。
一般,内部类与包含它的外部类有比较密切的关系,而与其他类关系不大,定义在类内部,可以实现
对外部完全隐藏,有更好的封装性,代码实现更为简洁
内部类可以方便的访问外部类的私有变量,可以声明为private从而实现对外完全隐藏
根据定义的位置和方式不同,可分为4类:
静态内部类,成员内部类(两者均可被外部使用)
方法内部类,匿名内部类(都不能在外部使用)
1.静态内部类
静态内部类与静态变量和静态方法定义的位置一样,也带有static关键字。
静态内部类除了位置放在其他类内部外,与一个独立的类差别不大。它只可以访问外部类的静态变量和方法、
public 静态内部类可以被外部使用,通过“外部类.静态内部类”的方法使用
如:Outer.StaticInner si =new Outer.StaticInner()
si.innerMethod();
java会为内部类生成一个访问私有变量的非私有方法
2.成员内部类
除了访问静态变量和方法,成员内部类还可以访问外部类的实例变量和方法,还可以通过“外部类.this.xxx”的方式引用外部类的实例变量和方法,一般在重名情况下使用。
成员内部类对象总与一个外部类对象相连,在外部使用时不能直接通过new Outer.Inner()方式创建对象,而是要先创建一个Outer类对象
Outer outer=new Outer;
Outer.Inner inner=Outer.new Inner();
inner.innerMethod();
3.方法内部类
定义在外部类方法中,只能在定义的方法中被使用。
如果方法是实例方法,则内部类可以访问静态变量和方法,实例变量和方法
如果方法是静态方法,则方法内部类只能访问外部类的静态变量和方法nim
方法内部类还可以访问方法的参数和方法中的局部变量,前提是这些变量被声明为final
4.匿名内部类
new 父类(参数列表){
//匿名内部类实现部分
}
或
new 父接口(){
//匿名内部类实现部分
}
只能使用一次,用来创建一个对象,没有名字,构造方法
可以访问外部类所有变量与方法,可以访问方法中的·final参数和局部变量
来源:https://www.cnblogs.com/wtblogwt/p/9717994.html