1、内部类的定义
将一个类定义在另一个类或方法里,这样类我们称它为内部类
2、内部类的分类
普通(成员)内部类、局部内部类、匿名内部类、静态内部类
3、普通内部类
public class Circle {
private double radius;
//内部类
class Draw {
public void drawSahpe() {
System.out.println("drawshape"+radius);
}
}
}
- Circle 为外部类。Draw 为内部类,可以理解为外部类 Circle 的一个成员
- 内部类可以条件访问外部类的所有属性和方法(包括 private 修饰的成员)
- 外部类中无法直接访问内部类的成员
- 当两个类定义重名的属性或方法时,会发成覆盖(隐藏现象),默认为内部类成员
若需访问外部类成员,可以用 "类.this.成员" 的办法进行访问
public class Circle {
private double radius;
// 内部类
class Draw {
private double radius;
public void drawSahpe() {
System.out.println("drawshape"+radius); // 也可以用 this.radius 表示
System.out.println("drawshape"+Circle.this.radius);
}
}
}
若需访问内部成员,需先创建内部类的方法,再访问内部类成员
public class Circle {
private double radius;
//内部类
class Draw {
private double radius;
public void drawSahpe() {
System.out.println("drawshape"+Circle.this.radius);
}
}
// 通过方法创建内部类对象
public Draw getDrawInstance() {
return new Draw();
}
public void print(){
// 访问内部类对象的成员
this.getDrawInstance().drawSahpe();
}
public void main(String[] args){
Circle.Draw draw = new Circle().getDrawInstance();
draw.drawSahpe();
};
}
4、局部内部类
public class Person{}
public class Man{
public Person getWoman(){
//局部内部类
class Woman extends Person{
int age =0;
}
return new Woman();
}
}
- 局部内部类作用域仅限于方法内
- 定义局部类时,不能有修饰符( public、protected、private、static ),它起到局部变量的作用
- 访问权限与普通内部类一致
5、内部类的编译
可见,内部类编译后的文件与普通类的编译文件并不相同