内部类:
1.定义:我们可以在一个类A的内部,声明另一个类B.此时,类A:外部类;类B:内部类
2.内部类的分类:成员内部类 (静态的 vs 非静态的) vs 局部内部类
3.说明:
一方面,作为类:
-
①内部可以声明属性、方法、构造器
-
②可以被abstract修饰
-
③可以被 final修饰
另一方面,作为外部类的成员:
-
①可以被4种权限修饰符修饰。
-
②可以调用外部类的属性、方法等结构
-
③可以被static修饰
4.成员内部类:
4.1如何创建成员内部类的对象?(静态的,非静态的)
//如何创建静态的成员内部类对象
Person.Dog dog = new Person.Dog();//错误的:Person.new Dog()
dog.show();
//如何创建非静态的成员内部类对象
//Person.Bird bird = new Person.Bird();//错误的
Person p = new Person();
Person.Bird bird = p.new Bird();//错误的:new p.Bird();
bird.display(“麻雀”);
4.2如何在成员内部类中调用外部类的结构?
class Person{
String name;
class Bird{
String name;
public void display(String name){
System.out.println(name);//形参
System.out.println(this.name);//Bird的属性
System.out.println(Person.this.name);//Person的属性
}
}
}
5.局部内部类:
此情况开发中很少见
public void method(){
局部内部类
class InnerClass{
}
}
较为常见的
返回一个实现了Comparable的类的对象
public Comparable getInstance(){
//写法一:提供实现了接口的内部类
class MyComparable implements Comparable{
@Override
public int compareTo(Object o) {
return 0;
}
}
return new MyComparable();
//写法二:返回接口的匿名实现类的匿名对象
return new Comparable(){
@Override
public int compareTo(Object o) {
return 0;
}
};
}