zoukankan      html  css  js  c++  java
  • 使用内部类隐藏实现细节

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

     
  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/lidaojian/p/2562924.html
Copyright © 2011-2022 走看看