看书时,谈到合成和继承的时候,书中说到这么一句话:如果想利用新类内部一个现有类的特征,而不想用它的接口,通常应选择合成。也就是说,我们课嵌入一个对象,使自己能用它实现新类的特征。我不是很理解,“想利用新类内部一个现有类的特征,而不想用它的接口”,这句话是什么意思啊

解决方案 »

  1.   


    /**
     * ClassA有两个公用方法,也是通用意义上的接口。
     */
    class ClassA { public void Method1() {

    } public void Method2() {

    }

    }/**
     * ClassB想使用Method1这个特性,但又不想有Method2.
     */
    class ClassB {

    private ClassA a = new ClassA();

    public void Method1() {
    a.Method1(); // 通过这种方式,ClassB就有了Method1这样的一个特性。由于ClassB没有声明Method2这个方法,所以B就没有了这个特性。
    }

    }
    /**
     * 而如果是使用继承的话,ClassC就自动具有了Method1和Method2两个方法。
     */
    class ClassC extends ClassA{

    }
      

  2.   


    比如水果有 color()方法(接口); size();
    苹果是水果也需要这些接口, 所以要继承水果; 继承后就自动有了这些接口人 这个类 想吃“红”苹果, 不过人不是水果,不应该有color和size接口,但是要用到 苹果的color()的特性。人的eat() 方法中就调用了苹果的color() 。这样人与苹果就是组合关系,苹果和水果就是继承关系。eat()
    {
       if(apple.color == "red") goahead();
       else return;
    }
      

  3.   

    调用一个方法,有2个方式1 你继承了一个类,那个类有这个方法
    2 你包含、合成了一个类,你提供这个方法,但不是自己实现,而是调用你合成的那个类的对应方法
    非常类似代理的模式老紫竹CSDN论坛插件发布-竹签V1.0