面向对象的可重复利用,有一种很好的方法,往往被大家忽略。就是成员对象。在thinking in java中进行了很好的阐述。

最简单地复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新类中。我们称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。——Thinking in Java
所谓成员对象就是A类的成员变量的类型是B类,那么A类的穿越变量的属性就是B类的属性,那么该成员可以调用与之对应类型的B类的方法。
  • ##### 下面通过一个小demo来看一下他的具体实现
我们想要通过程序来描述书,那么我们可以将之定义为书类,而书中我们大致也分为电子书和纸质书两种,显然,将他们都放在书类来写,程序必定冗余繁杂,并且后期维护困难,这时就是“成员对象”大显身手的时候了。我们不妨将电子书和纸质书分别单独归位一类,最后用书类来个大一统。具体代码如图
  • ##### 这是电子书类
package book;
//这是电子书类
public class Ebook{
//两个成员变量出版时间和价格
    private String publishTime = "";
    private double price = 0;
    //构造函数
    Ebook(String publishTime, double price){
        this.publishTime = publishTime;
        this.price = price;
    }
    //Ebook类的方法,获取价钱
    double getPrice(){
        return this.price;
    }
}
  • ##### 这是纸质书类
package book;
//这是纸质书类
public class PaperBook{
//两个成员变量出版时间和价格
    private String publishTime = "";
    private double price = 0;
    //构造函数
    PaperBook(String publishTime, double price){
        this.publishTime = publishTime;
        this.price = price;
    }
    //获取价钱
    double getPrice(){
        return this.price;
    }
}
  • ##### 最后是大哥出场时间
package book;
//这是书类
public class Book{
    private Ebook ebook = new Ebook("1998年11月12日",2.5);
    private PaperBook pBook = new PaperBook("1998年11月12日",250);

    void showEPrice(){
        System.out.println("该书的电子书价格为"+ebook.getPrice()+"元" );
    }
     void showPPrice(){
        System.out.println("该书的纸质书价格为"+pBook.getPrice()+"元" );
    }

    public voic static main(String[] args){

        Book book = new Book();
        book.showEPrice();
        book.showPPrice();

    }
}

结果是:

该书的电子书价格为2.5元
该书的纸质书价格为250元