在继承的子类中,可以把父类中允许的访问控制成员变量和方法进行再次的改造,这在一定程度破坏了Java面向对象的封装。而且在Java中继承是一种单继承的存在。
如果需要在一个类中,获取其他类(一个或多个)的相关方法,我们可以通过组合的方式,把需要的方法整合到当前类中,需要的方法是调用类的相关方法。
我们通过在当前类中定义其他类的对象作为当前类的成员变量去使用。需要定义什么方法就调用其他类的什么方法。而不是像继承一样,一股脑的把父类所有的可访问属性和方法都获取到当前类中。
public class Animal {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
public void fun1() {
System.out.println("fun1");
}
}
public class Bird {
private Animal an;
public Bird(Animal an) {
this.an = an;
}
public void fun1() {
an.fun1();
}
}