class Insect {
private int size;
private String color;
public Insect(int size, String color) {
this.size = size;
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void move() {
System.out.println("Move");
}
public void attack() {
move(); //假设昆虫在攻击前必须要先移动一次
System.out.println("Attack");
}
}
/////子类
class Bee extends Insect {
public Bee(int size, String color) {
super(size, color);
}
public void move() {
System.out.println("Fly");
}
public void attack() {
move();
super.attack();//调用了父类的attack,但是调用了子类的move()
}
}
public class InheritanceVSComposition {
public static void main(String[] args) {
Insect i = new Bee(1, "red");
i.attack();
}
}
输出结果为:
Fly
Fly
Attack
第47行,super.attack();为什么是调用了子类的move()而不是父类的?能解释下原理吗?