复用类

来源:互联网 发布:高斯滤波算法实现 编辑:程序博客网 时间:2024/05/17 02:01

组合

使用方法:在新的类中产生现有类的 对象

package javabasis.OO;/** * Created by admin on 2017/2/14. */class Stu {    private int id;    private Grade grade;    public Stu(int id, Grade grade) {        this.id = id;        this.grade = grade;    }    public void getInfo(){        System.out.println("学生编号:"+this.id);        System.out.println("语文成绩:"+this.grade.Chinese);        System.out.println("数学成绩:"+this.grade.math);    }}class Grade{    int Chinese;    int math;    public Grade(int chinese, int math) {        Chinese = chinese;        this.math = math;    }}public class ZuHe{    public static void main(String[] args) {        Stu stu = new Stu(1001,new Grade(88,96));        stu.getInfo();    }}
在上面的例子中,成绩是一个基础类,包含语文、数学两种属性。学生是一个新产生的类,每个学生都包含成绩的属性,故把成绩这个类作为学生类的一个属性,是一种has-a的关系。

继承

package javabasis.OO;/** * Created by admin on 2017/2/14. */public class DuoTai {    public static void main(String[] args) {        Animal dog = new Dog("旺财");        dog.spark();    }    void speak(Animal animal){        animal.spark();    }}class Animal{    String name;    void spark(){        System.out.println("动物会叫");    }    public Animal(String name) {        this.name = name;    }}class Dog extends Animal{    public Dog(String name) {        super(name);    }    @Override    void spark() {        //super.spark();        System.out.println(super.name);        System.out.println("汪汪");    }}


在上面的例子当中,狗是动物的一种。使用extends关键字实现。子类具备父类的所有属性和方法。同时,也可以改进继承自父类的方法,实现不同的功能
是一种is-a的关系(狗是动物的一种)

组合和继承之间的选择


到底是该用组合还是继承,一个清晰的方法是判断到底需不需要从新类型向基类进行向上转型。如果必须向上转型,则继承是必要的;但如果不是必须的,那么就需要好好考虑是否真的需要继承了。


参考文献:《Java编程思想》第四版


0 0
原创粉丝点击