类的内部成员之五:内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类。
在 Java 中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类
类的内部成员之五:内部类
1、Java中允许一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类
2、内部类的分类:成员内部类(静态、非静态)和局部内部类(方法内、代码块内、构造器内)
3、成员内部类:
3.1一方面,作为外部类的成员
①调用外部类的结构
②可以用static修饰
③可以被四种不同的权限修饰
3.2另一方面,作为一个类
①类的内部可以定义属性、方法、构造器等
②可以用final修饰,表示此类不能被继承,反之,可以被继承
③可以被abstract修饰,不能被实例化,反之,可以被实例化
4、问题
①如何实例化成员内部类的对象
public class InnerClassTest {
public static void main(String[] args) {
//创建Dog(静态成员内部类)实例化
Person.Dog dog=new Person.Dog();
dog.show();
//创建Bird(非静态成员内部类)实例化
Person p=new Person();
Brid bird=p.new Brid();
bird.sing();
bird.display();
p.eat();
}
}
class Person{
String name;
int age;
public void eat(){
System.out.println("人:吃饭");
}
//静态成员内部类
static class Dog{
String name;
int age;
public void show(){
System.out.println("狗:啃骨头");
}
}
//非静态成员内部类
class Brid{
String name;
int age;
public Brid(){
}
public void sing(){
System.out.println("鸟:唱歌");
Person.this.eat();//调用外部类的非静态属性
}
//有重名的情况下
public void display(){
System.out.println(name);//方法的形参
System.out.println(this.name);//内部类的属性
System.out.println(Person.this.name);//外部类的属性
}
}
}
②如何在成员内部类中区分调用外部类的结构
运行: