内部类:定义在一个类内部的类,也称嵌套类。
实例内部类:
实例内部类程序示例:
import mypro01.Outter.Inner;
class Outter{ //外部类
int age=2;
String sex="mail";
public void doWorkOut(){
System.out.println("我是外部类方法");
}
class Inner{ //内部类
int age=12;
String name;
public void doWorkIn(){ //内部类方法
doWorkOut(); //内部类可直接访问外部类方法
//内部类访问外部类同名和不同名成员的方法
System.out.println("内部类可直接访问外部类成员"+sex);
System.out.println("内部类可访问外部类同名成员age :"+Outter.this.age);
System.out.println("内部类的age和name: "+this.age+" "+this.name);
}
}
}
public class InnerClass {
public static void main(String[] args) {
System.out.println("**************外部类对象测试*****************");
Outter out1= new Outter();
System.out.println(out1.age);
System.out.println(new Outter().age);
System.out.println("**************内部类对象测试*****************");
Inner in1= new Outter().new Inner(); //内部类定义方法
Inner in2=out1.new Inner(); //内部类定义方法
System.out.println(in1.name);
System.out.println(in2.name);
System.out.println(in2.age);
System.out.println("**************内部类方法测试*****************");
in1.doWorkIn();
}
}
实例内部类程序示例运行结果:
**************外部类对象测试*****************
2
2
**************内部类对象测试*****************
null
null
12
**************内部类方法测试*****************
我是外部类方法
内部类可直接访问外部类成员mail
内部类可访问外部类同名成员age :2
内部类的age和name: 12 null
静态内部类
静态内部类程序示例:
import mypro01.Outter.Inner;
class Outter{ //外部类
int age=2;
static String sex="mail";
public void doWorkOut(){
System.out.println("我是外部类非静态方法");
}
static public void doWorkOut2(){
System.out.println("我是外部类静态方法");
}
static class Inner{ //内部类
int age=12;
String name;
public void doWorkIn(){ //内部类方法
//静态内部类可直接访问外部类静态成员(字段和方法),但无法直接访问外部类非静态成员。
System.out.println("静态内部类可直接访问外部类静态成员"+sex);
doWorkOut2();
//静态内部类访问外部类非静态成员(字段和方法)时,需通过外部类实例去访问。
System.out.println("静态内部类访问外部类非静态成员age :"+new Outter().age);
new Outter().doWorkOut();
System.out.println("内部类的age和name: "+this.age+" "+this.name);
}
}
}
public class InnerClass {
public static void main(String[] args) {
System.out.println("**************外部类对象测试*****************");
Outter out1= new Outter();
System.out.println(out1.age);
System.out.println(new Outter().age);
System.out.println("**************内部类对象测试*****************");
Inner in1= new Inner(); //静态内部类在创建实例时,不必创建外部类实例
Outter.Inner in2= new Outter.Inner();
System.out.println(in1.name);
System.out.println(in2.name);
System.out.println(in2.age);
System.out.println("**************内部类方法测试*****************");
in1.doWorkIn();
}
}
静态内部类程序运行示例:
**************外部类对象测试*****************
2
2
**************内部类对象测试*****************
null
null
12
**************内部类方法测试*****************
静态内部类可直接访问外部类静态成员mail
我是外部类静态方法
静态内部类访问外部类非静态成员age :2
我是外部类非静态方法
内部类的age和name: 12 null
局部内部类(注意区别局部内部类和成员内部类)
- 局部内部类属于方法中的类。
- 成员内部类是属于类中的类。
局部内部类程序示例:
局部内部类程序示例运行结果:
匿名内部类
匿名内部类程序示例:
匿名内部类程序运行结果: