java内部类主要分为成员内部类、静态内部类、局部内部类、匿名内部类。
(1)成员内部类(相当于内的成员方法)
package InnerOutter; /** * 成员内部类 * * @author Administrator * */ public class OuterClass { // 成员内部类 class InnerClass { public InnerClass() { // 构造方法 } public void inf() { System.out.println("内部类方法!"); } private int y = 0;// 内部类成员变量 } // 在外部类实例化内部类实例化引用 InnerClass in = new InnerClass(); // 外部方法 public void test() { in.inf(); } /** * 外部方法,返回内部类的引用 * * @return */ public InnerClass doit() { in.y = 5; return new InnerClass(); } public static void main(String[] args) { OuterClass out=new OuterClass(); //内部类的对象实例化操作必须在外部类或者外部类中非静态方法中实现
//OuterClass.InnerClass in2=out.new InnerClass();
OuterClass.InnerClass in=out.doit(); System.out.println(in.y); } }
(2)匿名内部类(这种内部类用得比较多):在编写程序的时候,不一定要给内部类取一个名字,可以直接以对象名代替。所有匿名内部类的实现代码都写在大括号内。在图形界面编程的事件监听代码中,会大量使用匿名内部类,这样可以简化代码,并增加代码的可读性。
public void sortNameAsc() { users=db.getUserList(); Collections.sort(users,new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getName().compareTo(o2.getName()); } }); for(User s:users){ System.out.println(s); } }
(3)局部内部类:是指在类的方法中定义的内部类,,它的作用范围也是在这个方法体内。
package InnerOutter; /** * 局部内部类 * @author Administrator * */ public class SellOutClass { private String name; public SellOutClass(){ name="苹果"; } //成员方法 public void sell(){ class Apple{//局部内部类 int innerPrice=0; public Apple(int price){//局部内部类构造方法 innerPrice=price; } public void price(){//局部内部类方法 System.out.println("现在开始销售"+name); System.out.println("价格为:"+innerPrice+"元"); } } //在方法体内调用局部内部类 Apple apple=new Apple(20);//实例化局部内部类对象 apple.price(); } public static void main(String[] args) { SellOutClass sel=new SellOutClass(); sel.sell(); } }
(4)静态内部类:相当于静态方法或者静态变量,在类前面有static修饰,这种内部类使用的比较少。
(5)内部类也可以继承,它有自己语法。