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());
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值