内部类:在一个类中定义一个类,分为成员内部类和局部内部类(定义在方法中)
public class 类名
{
修饰符 class 类名
{
}
}
1.内部类可以直接访问外部类的成员,包括私有
2.外部类要访问内部类的成员必须创建对象
外界创建内部类对象(仅当内部类是public时):外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();//内部类对象
因为内部类一般都是private,所以可在外部类中创建一个方法,在方法中创建内部类对象来使用,外界要用内部类只要调用该方法即可
public class Outer
{
private int num = 40;
private class Inner//成员内部类
{
public void show()
{
System.out.println(num);
}
}
public void method()
{
Inner i = new Inner();
i.show();
}
}
public class Outer
{
private int sum = 10;
public void method()
{
class Inner//局部内部类(外界无法使用,要在方法内部创建对象再使用,该类可直接访问外部类的成员)
{
public void show()
{
System.out.println(num);
}
}
Inner i = new Inner();
i.show();
}
}
匿名内部类(局部内部类的特殊情况)
前提:存在一个类(可以具体类或抽象类)或接口
本质:是一个继承了该类或实现了该接口的子类匿名对象
new 类名或接口名
{
重写方法;
};
new Inter()
{
public void show()
{
}
};
public interface Inter{void show();}
public class Outer
{
public void method()
{
new Inter()//相当于Inter i = new Inter();再调用i.show()也可;
{
public void show()
{
System.out.println("匿名内部类");
}
};//仅是对象没有调用show()
new Inter()
{
public void show()
{
System.out.println("匿名内部类");
}
}.show();//调用
}
}
public class OuterDemo
{
public static void main(String [] args)
{
Outer o = new Outer();
o.method();//输出匿名内部类
}
}
接下来在学习新知识的同时也要时常复习前面的知识,温故而知新