内部类的特征:内部类也是一个独立的类,生成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(); } }
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(); }
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(); } }