一文读懂之java组合

组合:像扩展哪个类的功能,就将那个类的对象的引用作为构造方法的形参。
定义一个Person类

class Person{void eat(){System.out.println("人吃饭");}
}
class Student extends Person{void eat(){super.eat();System.out.println("学生在食堂吃饭");}
}

定义一个SuperMan,不继承Person还想拥有Person的功能

class SuperPerson{Person person;public SuperPerson(Person person) {this.person = person;}void eat(){person.eat();System.out.println("超人吃20个汉堡包!");}
}

测试类

public class Test {public static void main(String[] args) {Person person = new Person();SuperPerson person1 = new SuperPerson(person);person1.eat();new SuperPerson(new Student()).eat();}
}


从结果看,超人类可以不继承父类吃饭功能还能拥有子类吃饭功能。
因此,总结。
共同点:继承和组合:都是在现有类的基础上扩展类的行为
不同点:组合既可以实现Person 实例,也可以实现Person 的子类的对象。
组合优于继承,但是继承是多态的基础

本文链接:https://my.lmcjl.com/post/20808.html

展开阅读全文

4 评论

留下您的评论.