内部类概念及分类
概念
我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。
内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。
作用:
- 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
- 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。
- 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。
分类
内部类代码示例
package TestTextbook;
public class TestInnerclass {
public static void main(String[] args) {
// Fish非静态内部类调用先创建外部类实例,然后使用该外部类实例创建内部类实例
Outside.Fish cc = new Outside().new Fish();
cc.fish();
// Fish非静态内部类第二种写法
Outside a = new Outside();
Outside.Fish b = a.new Fish();
b.fish();
// Bird静态内部类通过 new 外部类名.内部类名() 来创建内部类对象
Outside.Bird wang = new Outside.Bird();
wang.bird();
}
}
class Outside {
private int num = 10101;
void nature() {
System.out.println("This is beautiful nature");
}
// 内部类bird
static class Bird {
String name = "bird";
void bird() {
System.out.println("I fly in the shy");
}
}
// 内部类fish
class Fish {
// static int num;//非静态里面就不要出现static啦
int num = 101;
String name = "fish";
void fish() {
System.out.println("I swim in the water");
// 成员变量的访问
System.out.println("内部类方法里的局部变量age:" + num);// 101
System.out.println("内部类的成员变量age:" + this.num);// 101
System.out.println("外部类的成员变量age:" + Outside.this.num);// 10101
}
}
}