使用内部类隐藏实现细节

  内部类的重要价值在于其隐藏实现细节的能力,做法是将内部类访问属性设置为private,并且内部类实现了一个接口或者继承了一个类。然后由外围类建立方法以生成这些内部类的实例,而这些方法的返回类型必须是父类。

下面是这种编程方式的一个范例:

package Stephen.Class.chapter7;
//以内部类实现隐藏具体类信息测试
public class InnerClassUpperCase {
    public static void main(String[] args){
        Cat cat = new Cat();//创建对象
        PetStore petStore = new PetStore();
        cat.eat(petStore.provideSardine());
        cat.eat(petStore.provideHerring());
        cat.eat(petStore.provideTuna());
    }
}
//
class Cat{
    public void eat(Fish fish){
        System.out.println("正在吃" + fish);
    }
}
//
interface Fish{
    String bone = "鱼骨";
    boolean swimming = true;
}
//宠物店
class PetStore{
    //沙丁鱼
    private class Sardine implements Fish{
        private String name;
        public Sardine(){
            name = "沙丁鱼";
        }
        public String toString(){
            return name;
        }
    }
    //大青鱼
    private class Herring implements Fish{
        private String name;
        public Herring(){
            name = "大青鱼";
        }
        public String toString(){
            return name;
        }
    }
    //金枪鱼
    private class Tuna implements Fish{
        private String name;
        public Tuna(){
            name = "金枪鱼";
        }
        public String toString(){
            return name;
        }
    }
    //供应沙丁鱼
    public Fish provideSardine(){
        return new Sardine();
    }
    //供应青鱼
    public Fish provideHerring(){
        return new Herring();
    }
    //供一个金枪鱼
    public Fish provideTuna(){
        return new Tuna();
    }
}

运行结果为:

  这个程序中得类PetSore内部有三个内部类,分别是Sardine。Herring 、Tuna。这三个类是私有的,因此只能在PetSore类内部可见,并且都实现了接口Fish。而三个创建内部类的方法provideSardine、provideHerring、provideTuna其返回值类型都是Fish,因此对于外部的调用者而言,内部类Sardine。Herring 、Tuna是不可见的。

  Cat类表示猫, 对于猫而言, 只要是鱼都可以入口,因此其eat方法接受的是Fish的类型的参数,在main方法中Cat的实例cat调用了三次eat方法, 三次接受的实际类型分别是Sardine。Herring 、Tuna。但是Cat对象并不知道这种情况,他只知道刚才“吃了一条鱼”。这种编程方式有效的实现了类型的隐藏。

 

转载于:https://www.cnblogs.com/lidaojian/archive/2012/06/25/2562924.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值