• 使用内部类隐藏实现细节


      内部类的重要价值在于其隐藏实现细节的能力,做法是将内部类访问属性设置为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对象并不知道这种情况,他只知道刚才“吃了一条鱼”。这种编程方式有效的实现了类型的隐藏。

     
  • 相关阅读:
    ASP.NET MVC 学习: 视图
    翻译:ASP.NET MVC Example Application over Northwind with Entity Framework
    主流web2.0网站的配色参考方案
    jQuery1.2选择器
    ASP.NET MVC URL Routing 学习
    [转]关于DOM元素定位属性的深入学习
    ASP.NET MVC : Action过滤器(Filtering)
    【翻译】使用ASP.NET MVC 和LINQ建立一个简单的博客 Part 3
    Windows 8开发者训练营第一日来自现场的图片报道
    从数据到信息到决策
  • 原文地址:https://www.cnblogs.com/lidaojian/p/2562924.html
Copyright © 2020-2023  润新知