淘先锋技术网

首页 1 2 3 4 5 6 7

内部类

建议参考:http://www.cnblogs.com/dolphin0520/p/3811445.html

  1. 在一个外部类的内部再定义一个类。类名无需与文件夹相同。
  2. 内部类可用static,public,protected,private,default修饰
  3. 内部类的成员变量/方法名可以和外部类的相同

类别


  1. 成员内部类
  2. 局部内部类
  3. 匿名内部类
  4. 静态内部类


每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 内部类使得多继承的解决方案变得完整;方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏;方便编写事件驱动程序;方便编写线程代码

详解

成员内部类

  1. 不能含有static的变量和方法,因需先创建外部类对象,而后创建内部类对象。
  2. 使用outer.this来表示外部类对象
/**
 * 成员内部类
 * Outer.java
 * @author xianggen
 * @date 2016年7月24日 下午6:49:50
 */
package xianggen.innerclass;
public class Outer{
    public static void main(String[] args) {
        Outer outer=new Outer();
        Outer.Inner inner=outer.new Inner();
        inner.innerMethod();
        System.out.println("通过new关键字产生内部类对象!");

        inner=outer.getInner();
        inner.innerMethod();
        System.out.println("通过外部类的get方法得到内部类对象");
    }

    /**
     * 通过get方法来获取成员内部类
     * @return
     */
    public Inner getInner(){
        return new Inner();
    }

    public class Inner{
        int innerData;
        public void innerMethod(){
            System.out.println("innerData="+innerData);
        }
    }
}

局部内部类

  1. 定义在方法或者作用域内(语句块)
  2. 不能加任何访问修饰符(public等及static),因为只对局部有效。可用final和abstract修饰。
  3. static方法中定义的内部类可以访问外部类定义的static成员。
package xianggen.innerclass;
/**
 * 局部内部类
 * LocalInnerClass.java
 * @author xianggen
 * @date 2016年7月24日 下午7:10:54
 */
public class LocalInnerClass {

    private void internalTracking(boolean b) { 
        if (b) { 
            // 作用域里定义内部类
            class TrackingSlip { 
                private String id; 
                TrackingSlip(String s) { 
                    id = s; 
                } 
                String getSlip() { 
                    return id; 
                } 
            } 
            TrackingSlip ts = new TrackingSlip("slip"); 
            String s = ts.getSlip(); 
        } 
    } 

    public static void main(String[] args) { 
        LocalInnerClass p = new LocalInnerClass(); 
        p.internalTracking(true); 
    } 

}

匿名内部类

  1. 没有名字。匿名内部类是唯一一种没有构造器的类
  2. 不能加访问修饰符
  3. 目的是创建一个类的实例,这个实例只用一次。即在定义类的同时就创建一个类的实例。
  4. 由于匿名内部类没有名称,所以类体中不能定义构造方法。不能使用关键字来创建该类的实例
//似乎有问题,编译不通过,想不通
public class AnonymousClass {
    public void anonymousMethod(new Object(){
        public void method(){
             System.out.println("creating a anonymous class!");
        }
    });
}

静态内部类

声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。
一般声明为public,方便调用

枚举类

简介

JDK 1.5 中引入的新特性,存放在 java.lang 包

用法

1.定义常量

//定义常量
public enum EnumColor {
    RED,GREEN,BLACK,YELLOW
}

2.switch跳转

//swich跳转!
enum Signal{
    GREEN,YELLOW,RED
}

class TrafficLight {
    Signal color = Signal.RED;

    public void change() {
        switch (color) {
        case RED:
            color = Signal.GREEN;
            break;
        case YELLOW:
            color = Signal.RED;
            break;
        case GREEN:
            color = Signal.YELLOW;
            break;
        }
    }
}

更多用法参考:
http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html