将一个类的定义放在另一个类的定义内部,这就成为是内部类
内部类分为非静态内部类、静态内部类、局部内部类和匿名内部类。
1、创建非静态内部类
/*
*测试非静态内部类
* */
public class TestInnerclass {
public static void main(String[] args) {
//创建内部类对象
Outer.Inner inner=new Outer().new Inner();
inner.show();
}
}
class Outer{
public int age=10;
class Inner{
int age=20;
public void show() {
System.out.println("外部类的成员变量age:"+Outer.this.age);
}
}
}
注意在创建内部类对象时,一定要有对应的外部类,Outer.Inner inner=new Outer().new Inner();
2、创建静态内部类
/*
* 测试静态内部类
* 静态内部类.名字
* */
public class TeststaticInner {
public static void main(String[] args) {
Outer1.Inner inner=new Outer1.Inner();
//静态类的实例化方法不能直接访问外部类的实例方法
inner.show();
}
}
class Outer1{
//相当于外部类的一个静态成员
static class Inner{
int age=10;
public void show() {
System.out.println("静态内部类的成员变量age:"+this.age);
}
}
}
3、局部内部类使用不多
局部内部类是定义在方法里面的内部类,仅在该方法内有效。
4、创建匿名内部类
//匿名内部类
public class TestAnonymousInnerClass {
public static void test01(AA a) {
System.out.println("--------");
a.aa();
}
public static void main(String[] args) {
TestAnonymousInnerClass.test01(new AA() {
@Override
public void aa() {
// TODO Auto-generated method stub
System.out.println("TestAnonymousInnerClass.test01(new AA()");
}
});
}
}
interface AA{
void aa();
}
匿名内部类适合只需使用一次的类。比如键盘监听操作等。
它没有访问修饰符,也没有构造方法。
语法形式:
new 父类构造器(实参数表)\实现接口(){
}