我们将一个类定义在另一个类的内部,就是内部类。
/**
* 外部类(外部是相对于内部而言)
*/
public class OuterClass {
/**
* 内部类
*/
class InnerClass {
// ...
}
}
应用率不高(了解)
类中套类,外面的称为外部类,里面的称为内部类,这是一个相对来讲的概念
内部类通常只服务与外部类,对外不具备可见性
内部类对象通常在外部类中创建,当然也可以在外部类外部创建内部类对象
Inner inner = new inner();Outer.Inner inner = new Quter().new Inner();内部类中可以直接访问外部类的成员(包括私有的)

public class Outer {
private String name = "张三";
class Inner {
// 设置为私有也可以被外部类访问,图片截图忘记添加 private
private void test() { 忘记添加了
System.out.println("name = " + name);
}
}
public void action() {
Inner inner = new Inner();
inner.test();
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.action(); // name = 张三
}
}
内部类有个隐式的引用指向了创建它的外部类对象
隐式:外部类名.this - Outer.this

public class Outer {
private String name = "张三";
private int age = 18;
class Inner {
void test() {
System.out.println("name = " + name + " , age = " + age);
}
}
public void action() {
Inner inner = new Inner();
inner.test();
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.action(); // name = 张三 , age = 18
}
}
如果内部类如果和外部类变量/方法同名,默认使用的就是内部类的变量和方法(就近原则)

public class Outer {
private String name = "张三";
class Inner {
private String name = "李四";
void test() {
System.out.println("name = " + name);
}
}
public void action() {
Inner inner = new Inner();
inner.test();
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.action(); // name = 李四
}
}
Outer outer = new Outer() { ... }
{ ... } 为内部类通过 外部类的引用. 即可,如下面代码
public class Demo {
public static void main(String[] args) {
Outer outer = new Outer() {
@Override
void say() {
System.out.println("匿名内部类");
}
};
outer.say();
}
}
public abstract class Outer {
abstract void say();
}