定义:定义在另外一个类内部中的类称为内部类。
访问特点:
内部类可以直接访问外部类的所有成员(包括私有成员);
而外部类要访问内部类成员需要建立内部类对象:
class Outer
{
private int num = 14;
class Inner
{
void show ()
{
System.out.println("num=" +num);
}
}
public void method()
{
Inner in = new Inner();
in.show;
}
}
1、直接访问内部类的格式
public class InnerClassDemo
{
public static void main(String[] args)
{
//先创建外部类对象再用其创建内部类对象
Outer.Inner in = new Outer().new Inner();
in.show();
//如果内部类是静态的(static class Inner{....}),相当于一个外部类
//Outer.Inner in = new Outer.Inner();
//如果内部类是静态的,成员是静态的(static void show(){....})
//Outer.Inner.show();
}
}
2.如果内部类中定义了静态的成员,那么该内部类也必须是静态的。
3.内部类访问成员变量的顺序
class Outer
{
int num = 3;
class Inner
{
int num = 4;
void show ()
{
int num = 5;
Systenm.out,println("show run ......." +num); //输出show run......5
Systenm.out,println("show run ......." +this.num); //输出show run......4
Systenm.out,println("show run ......." +Outer.this.num); //输出show run......3
}
}
}
4.内部类在局部位置上只能访问局部中的被Final修饰的变量:x 要final修饰。
5.匿名内部类:内部类的简写格式,其实就是一个匿名子类对象
前提条件:1.必须能继承或者实现一个外部类接口
格式:new 父类/接口(){子类内容}
abstract class Demo
{
abstract void show();
}
6.匿名内部类的应用:
1.当函数的参数是接口类型,且接口中的方法不超过三个
7.匿名内部类向上转型后不能再使用特有的方法
obj.show报错。