1. 程式人生 > >java中的介面和內部類

java中的介面和內部類

在很多時候,我們需要在類的內部初始化一個靜態的Map或者List,然後儲存一下常量值提供給類內部方法使用。
我們通常的做法是:
首先初始化一個Map的靜態變數。

  1. private final static Map<String, String> CONSTANT =   
  2.     new HashMap<String, String>();  
  3. static {  
  4.     CONSTANT.put("1""one");  
  5.     CONSTANT.put("2""two");  
  6. }  
  1. new Thread() {  
  2.     public void run() {  
  3.         System.out.println("Thread running!");  
  4.     };  
  5. }.start();   

實際上上面這段程式碼的意思就是,宣告一個Thread的子類並重寫Thread的run()方法,然後建立一個該子類的例項然後呼叫其start()方法。由於宣告的該Thread的子類沒有名字,所以叫匿名類。又由於沒有名字的類只能存在於一個類或者一個方法內部,所以又稱為匿名內部類。

package com.test5;

/**
 * @描述 : 
 * @建立者 : guoxiaopeng
 * @建立時間 : 2017-8-4 上午9:18:31
 */
public class Cpu implements PCI{


    @Override
    public void start() {
        System.out.println("Cpu start");
    }


    @Override
    public void stop() {
        System.out.println("Cpu stop");
    }


}

package com.test5;
/**
 * @描述 : 
 * @建立者 : guoxiaopeng
 * @建立時間 : 2017-8-3 下午5:14:12
 */
public interface PCI {


    void start();
    void stop();
}

package com.test5;
/**
 * @描述 : 
 * @建立者 : guoxiaopeng
 * @建立時間 : 2017-8-3 下午5:20:40
 */
public class Test {


    public static void main(String[] args) {
        Cpu c=new Cpu();
        Yinpan yp=new Yinpan();
        Zhuban zb=new Zhuban();
        zb.UsePCIcard(c);
        zb.UsePCIcard(yp);
        zb.UsePCIcard(new PCI() {//相當於一個匿名內部類,這裡直接例項化一個介面,其實介面是不能例項化的,實際作用是充當了一個匿名的介面實現類


            @Override
            public void stop() {
                System.out.println("stop");
            }
            @Override
            public void start() {
                System.out.println("start");
            }
        });
    }
}

再來一個例子:

package com;
/**
 * @描述 : 
 * @建立者 : guoxiaopeng
 * @建立時間 : 2017-8-3 下午6:39:12
 */
public interface Wife {


    
    public String getWifeName();
    public String getWifeAddress(); 
    
}

package com;
/**
 * @描述 : 
 * @建立者 : guoxiaopeng
 * @建立時間 : 2017-8-3 下午6:34:49
 */
public class User {


    private int age=18;
    protected Object[] elementData;
    protected String name;
    protected String wifeName;
    protected String wifeAddress;
    public User(){}
    public User(String wifeName,String wifeAddress){
        this.name="zhangsan";
        this.age=20;
        this.wifeName="小李";
        this.wifeAddress="上海";
        this.elementData = new Object[10];
        elementData[0]=wifeName;
    }
    public Wife getWife(){
        return new Wife() {
            
            @Override
            public String getWifeName() { 
                return (String) elementData[0];
            }
            
            @Override
            public String getWifeAddress() {
                return wifeAddress;
            }
        };
    }
    
}

package com;
/**
 * @描述 : 
 * @建立者 : guoxiaopeng
 * @建立時間 : 2017-8-3 下午6:48:52
 */
public class Test {


    public static void main(String[] args) {
        User user=new User("小李", "上海");
        Wife wife = user.getWife();
        
        System.out.println(wife.getWifeAddress());
        System.out.println(wife.getWifeName());
    }
}