# 内部类
内部类分为四种:
- 成员内部类
- 局部内部类
- 匿名内部类
- 静态内部类
接下来逐一介绍
# 成员内部类
成员内部类是位于外部内的里面,类似外部类的属性存在,特征也与外部类属性相似。
# 特点
- 内部类可以访问外部类属性和方法(包括私有方法)
- 外部类必须通过内部类实例才能访问内部类
# 代码
class Circle {
private double radius = 0;
public static int count =1;
public Circle(double radius) {
this.radius = radius;
}
class Draw { //内部类
public void drawSahpe() {
System.out.println(radius); //外部类的private成员
System.out.println(count); //外部类的静态成员
}
}
}
# 注意
- 外部类和内部类存在相同的属性时,默认调用内部类属性,如果要调用外部类则需要指定:外部类.this.成员属性/方法
- 其他类要创建其内部类,必须要先实例其外部类,再通过外部类创建内部类
- 注意访问控制符,由于成员内部类与成员属性类似,因此支持多种访问控制符
# 局部内部类
局部内部类是指在方法中或在作用域范围内的内部类,这也是与成员内部类的区别
# 代码
class People{
public People() {
}
}
class Man{
public Man(){
}
public People getWoman(){
class Woman extends People{ //局部内部类
int age =0;
}
return new Woman();
}
}
# 匿名内部类
应该是开发人员用得最多得内部类,这里不做赘述。
# 代码
new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
# 静态内部类
同成员内部类很类似,但多了static修饰。
但要特别注意,静态内部类不依赖于外部类实例,这与静态属性一样,并且静态内部类不能使用外部类的非static成员属性或方法。
# 代码
public class Test {
public static void main(String[] args) {
Outter.Inner inner = new Outter.Inner();
}
}
class Outter {
public Outter() {
}
static class Inner {
public Inner() {
}
}
}
# reference
https://www.cnblogs.com/dolphin0520/p/3811445.html
← 简介