在Java的世界中,万物皆对象;在封装的思想中,万物都归类。
概念:在类的内部再定义一个完整的类
成员内部类
private String name = "外部zxx";
private int age = 23;
public class InnerClass{
private String country = "China";
private String name = "内部郑鑫鑫";
//不可定义静态属性,但常量可以 private static final char sex = '男';
public void show(){
System.out.println(OuterClass.this.name);
System.out.println(OuterClass.this.age);
System.out.println(this.name);
System.out.println(this.country);
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.show();
//不需要用对象去调用
new OuterClass().new InnerClass().show();
}
静态内部类
//在静态内部类前写上无括号的外部类名,展示包含关系(推荐)
OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
private String name = "外部zxx";
private int age = 23;
public static class InnerClass{
private String country = "China";
private String name = "内部郑鑫鑫";
private static int leg = 2;
//不可定义静态属性,但常量可以 private static final char sex = '男';
public void show(){
System.out.println(new OuterClass().age);
System.out.println(new OuterClass().name);
System.out.println(this.name);
System.out.println(this.country);
//静态属性需要类名.属性名
System.out.println(InnerClass.leg);
}
}
局部内部类
private String name = "郑鑫鑫";
private int age = 11;
public void show(){
String address = "南京";
class Inner{
private String email = "1272@qq.com";
private char sex = '男';
private String name = "zxx内部";
public void show2(){
System.out.println(Outer.this.name);
System.out.println(Outer.this.age);
System.out.println(this.email);
System.out.println(this.sex);
System.out.println(this.name);
//打印局部变量时address加了final,因为其生命周期无法保证
System.out.println(address);
//试一下address能不能被修改,不能
//address = "修改后的地址";
email = "123@gamil.com";
}
}
//需要new局部内部类对象并调用show2方法打印
Inner inner = new Inner();
inner.show2();
}
public static void main(String[] args) {
Outer outer = new Outer();
//main方法调用时Inner.show2()不会打印,因为没有执行Inner的对象
outer.show();
}
匿名内部类
class Teacher implements Person{
@Override
public void student() {
System.out.println("老师属于人");
}
}
new Teacher().student();
new Person(){
@Override
public void student() {
System.out.println("老师属于人");
}
}.student();
}