将一个类定义置入另一个类定义中就叫做“内部类”
内部类分类:
成员内部类 匿名内部类 局部内部类
类中定义内部类特点:
- 内部类座位外部类的成员,可以直接访问外部类的成员(包括private成员)反之不行
- 内部类作为外部类成员,可声明为private、friendly、protected 、public
- 内部类成员只有在内部类的范围之内是有效的;
- 用内部类定义在外部类中不可访问的属性,这样就在外部类中实现了比外部类的private还要小的访问权限
- 编译后生成两个类
测试用例:
package cn.sxt.oop;
/**
* 测试非静态内部类
* @author l
*
*/
public class TestInnerClass {
public static void main(String[] args){
//创建内部类对象
Outer.Inner inner = new Outer().new Inner();
inner.show();
}
}
//非静态内部类
class Outer {
private int age = 10;
public void testOuter(){
}
//内部类
/*
* 内部类可直接使用外部类的属性
*/
class Inner{
int age = 20;
public void show(){
int age = 30;
System.out.println("外部类的成员变量age:"+Outer.this.age);
System.out.println("局部变量age:"+age);
System.out.println("成员变量age:"+this.age);
}
}
}
匿名内部类:适合那种只需要使用一次的类
语法:
new 父类构造器(实参类表) 、实现接口(){
//匿名类的类体
}
用例:
/**
* 测试匿名内部类
* @author l
*
*/
public class TestAnonymousInnerClass {
public static void test01(AA a){
a.aa();
}
public static void main(String[] args){
TestAnonymousInnerClass.test01(new AA(){
@Override
public void aa() {
// TODO Auto-generated method stub
System.out.println("ff");
}
});
}
}
interface AA{
void aa();
}
方法中的内部类:使用很少,暂不讲述
以上仅用于个人学习,如有错误请指出!