内部类的特征:内部类也是一个独立的类,生成class文件的时候命名会加上外部类的名称再加上$符号.
内部类可以分为:成员内部类、静态内部类、匿名内部类、方法内部类
1、成员内部类:可以访问外部类的任何对象,private的也可以;
例:
package cd.edu.test;
public class MyInnerClass {
private int index=0;
public class Inner{
public void print(){
System.out.println(index); //访问外部类的私有成员变量
}
}
}
内部类的调用:
package cn.edu.app;
import cd.edu.test.MyInnerClass;
public class Application {
public static void main(String[] args) {
MyInnerClass out=new MyInnerClass();
MyInnerClass.Inner inner=out.new Inner();
inner.print();
}
}
2、静态内部类:相当于切断了与外部类对象的联系,静态内部类中只能访问外部类中的静态成员方法和静态成员变量,如果该类是静态内部类,则可以拥有静态方法,否则不能拥有.
例:
package cd.edu.test;
public class MyInnerClass {
private static int index=0;
public static class Inner{
public void print(){
System.out.println(index);
}
}
}
内部类的调用:
package cn.edu.app;
import cd.edu.test.MyInnerClass;
public class Application {
public static void main(String[] args) {
MyInnerClass.Inner inner=new MyInnerClass.Inner();
inner.print();
}
}
3、匿名内部类:可以在方法中,也可以在类中
例(在方法中):
JButton btn=new JButton();
btn.addActionListener(new ActionListener(){ //在方法中实现的匿名内部类
public void actionPerformed(ActionEvent arg0) {
}
});
例(在类中):
public class OutClass{
private int index=0;
public showMessage(){
System.out.println("OutClass");
}
}
public class MyClass{
public static void mian(String [] args){
//该类一般为已经存在的一个类
OutClass out=new OutClass(){
public showMessage(){
//对该类具有的方法进行重新
System.out.println("myclass");
};
out.showMessage();
}
4、方法内部类:可以修饰的只能是final和abstract
例:
class MyOuterClass {
public void showMessage(){
final int index =1;
class MyInnerClass{
public void show(){
System.out.println(index);
}
}
MyInnerClass MyIn = new MyInnerClass();
MyIn.seeOuter();
}
public static void main(String[] args) {
MyOuterClass myOut = new MyOuterClass();
out.showMeaage();
}
}