java内部类-爱代码爱编程
内部类
-
内部类就是在一个类的内部在定义一个完整的类,比如,A类中定义一个B类,那么B类相对于A类来说就称为内部类,而A类相对B类来说就是外部类
class Outer(){ class Inner)(){ } }
-
编译之后可生成独立的字节码文件;上述代码会生成两个.class文件,Outer.class和Outer$Inner.class
-
内部类可直接访问外部类的私有成员,而不破坏封装
-
可为外部类提供必要的内部功能组件
成员内部类
-
在类的内部定义,与实例变量、实例方法同级别的类
-
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
-
当外部类,内部类存在重名属性时,会优先访问内部类属性
-
若此时需要访问外部类属性
-
Outer.this.id; //外部类名称.this.属性名
-
-
成员内部类不能定义静态成员;但可以包含静态常量
静态内部类
- 在成员内部类的基础上增加Static关键字
- 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
局部内部类
- 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
- 不能修饰为Static
- 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final
匿名内部类
- 必须继承一个父类或者实现一个接口
- 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
- 优
- 点:减少代码量
- 缺点:可读性差
public class Outer {
private int id=10;
public void Out(){
System.out.println("这是外部类的方法");
}
//局部内部类
public void Method(){
class Inner{
}
}
//成员内部类
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//内部类可以访问外部类的一些私有方法
public void getID(){
System.out.println(id);
}
}
}
//一个java类中可以有多个class类,但是只能有一个public class
class A{
}
///
//内部类和外部类实例化
//外部类
Outer outer = new Outer();
//成员内部类 通过外部类来实例化
Outer.Inner inner = outer.new Inner();
inner.in()
public class Application {
public static void main(String[] args) {
//匿名内部类
//Apple apple = new Apple();
//匿名对象的使用,不用把实例保存在变量中!!!
new Apple().go();
}
}
class Apple{
public void go(){
System.out.println("GO!");
}
}
).go();
}
}
class Apple{
public void go(){
System.out.println("GO!");
}
}