内部类就是在一个类的内部定义一个类,比如,A类中定义一个B类,那么B类相对于A类来说就称为内部类,而A类相对于B类来说就是外部类。

成员内部类

​ 私有的内部类只能在当前的外部类中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Dog {
public String name;
public int age;
public String sex;
public String weight;

public void eat() {
System.out.println("狗吃骨头");
}

public void f() {
System.out.println(money); // 成员内部类可以直接访问外部类属性
study();// 成员内部类可以直接访问外部类方法

// 外部类和内部类中有同名的属性时
System.out.println(Person.this.name); // 访问外部类的name
System.out.println(name);

Person.this.eat(); // 调用外部类的eat()
eat();// 内部的
}
}
1
2
3
4
// 创建成员内部类对象的语法
Person p = new Person();
// 外部类.内部类 名字 = 外部类对象.new 内部类();
Person.Dog dog = p.new Dog();

静态内部类

​ 静态内部类中可以定义静态的成员

​ 静态内部类中并不能访问外部类中的非静态成员

1
2
// 静态内部类创建对象
Person.Cat cat = new Person.Cat();

局部内部类

​ 定义在方法里面,很少见作为了解

​ 局部内部类只在当前方法有效

匿名内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 右边部分称之为匿名内部类
/*
* new 抽象类名(接口名){ ... }
*
* 匿名内部类的应用:若只在某一处使用时可采用匿名内部类
*/
Animal animal = new Animal() {

@Override
public void eat() {
System.out.println("吃东西");
}
};

animal.eat();