一、内部类:类的第五个成员
二、理解
1.定义:如果一个类A可以声明在另一个类B中,那么称类A为内部类,类B为外部类。
2.内部类的分类:成员内部类(静态、非静态) vs 局部内部类(可以声明在构造器、代码块、方法中)
3.成员内部类的理解:
一方面,作为外部类的一个成员:
>可以调用类的其他结构
>可以用static修饰
>可以被四种权限修饰符修饰
另一方面,作为一个类:
>可以定义属性、方法、构造器等结构。
>可以使用final关键字修饰,表示该类不能被继承
>可以使用abstract来修饰
4.成员内部类:
4.1、如何创建成员内部类的对象?(静态的,非静态的)
//实例化静态内部类的对象
Person.Dog dog = new Person.Dog();
//实例化非静态内部类的对象
Person p = new Person();
Bird bird = p.new Bird();
4.2、如何在成员内部类中调用外部类的结构?
class Person{
String name = "小明";
public void eat(){
}
//非静态成员内部类
class Bird{
String name = "杜鹃";
public void show(String name){
System.out.println(name);//内部类方法的形参
System.out.println(this.name);//内部类的属性
System.out.println(Person.this.name);//外部类的属性
Person.this.eat();
}
}
}
5、局部内部类的使用:
public Comparable getComparable(){
//方式一:
//造一个实现类
// class myComparable implements Comparable{
// @Override
// public int compareTo(Object o) {
// // TODO Auto-generated method stub
// return 0;
// }
// }
// return new myComparable();
//
//方式二:
return new Comparable(){
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
};
}
总结:成员内部类和局部内部类在编译后都会生产字节码文件。
格式:
成员内部类:外部类名$内部类名.class
局部内部类:外部类名$数字 内部类名.class