java中的介面和內部類
在很多時候,我們需要在類的內部初始化一個靜態的Map或者List,然後儲存一下常量值提供給類內部方法使用。
我們通常的做法是:
首先初始化一個Map的靜態變數。
- private final static Map<String, String> CONSTANT =
- new HashMap<String, String>();
- static {
- CONSTANT.put("1", "one");
- CONSTANT.put("2", "two");
- }
- new Thread() {
- public void run() {
- System.out.println("Thread running!");
- };
- }.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());
}
}