Java干货知识深入理解内部类干货知识深入理解内部类
主要介绍了Java干货知识深入理解内部类,定义在另一个类或方法中的类就叫做内部类,需要的朋友可以参考下
前言前言
说起内部类,大家并不陌生,并且会经常在实例化容器的时候使用到它。但是内部类的具体细节语法,原理以及实现是什么样
的可以不少人都还挺陌生,这里作一篇总结,希望通过这篇总结提高对内部类的认识。
内部类是什么?内部类是什么?
由文章开头可知,内部类的定义为:定义在另一个类或方法中的类。而根据使用场景的不同,内部类还可以分为四种:成员内
部类,局部内部类,匿名内部类和静态内部类。每一种的特性和注意事项都不同,下面我们一一说明。
成员内部类成员内部类
顾名思义,成员内部类是定义在类内部,作为类的成员的类。如下:
public class Outer {
public class Inner{
}
}
特点如下:
成员内部类可以被权限修饰符(eg. public,private等)所修饰
成员内部类可以访问外部类的所有成员,(包括private)成员
成员内部类是默认包含了一个指向外部类对象的引用
如同使用this一样,当成员名或方法名发生覆盖时,可以使用外部类的名字加.this指定访问外部类成员。如:
Outer.this.name
成员内部类不可以定义static成员
成员内部类创建语法:
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
局部内部类局部内部类
局部内部类是定义在方法或者作用域中类,它和成员内部类的区别仅在于访问权限的不同。
public class Outer{
public void test(){
class Inner{
}
}
}
特点如下:
局部内部类不能有访问权限修饰符
局部内部类不能被定义为static
局部内部类不能定义static成员
局部内部类默认包含了外部类对象的引用
局部内部类也可以使用Outer.this语法制定访问外部类成员
局部内部类想要使用方法或域中的变量,该变量必须是final的
在JDK1.8 以后,没有final修饰,effectively final的即可。什么意思呢?就是没有final修饰,但是如果加上final编译器也不会报
错即可。
匿名内部类匿名内部类
匿名内部类是与继承合并在一起的没有名字的内部类
public class Outer{
public List<String> list=new ArrayList<String>(){
{
add("test");
}
};
}
这是我们平时最常用的语法。
评论0
最新资源