课堂总结2
多态
即一种方法的两种形态,分别是编译时状态和运行时状态。在这两种状态中若有继承,则会有静态绑定和动态绑定。
- 编译时会进行静态绑定,若子类中含有父类中的构造方法(与父类中除参数外完全一致),不会报错,如果有任何差别(包括基本数据类型),就会报错,因此,系统报错不是在运行时,而是在编译时。
- 运行时会进行动态绑定,在子类中有某一方法,那么不管父类是否有,依旧执行子类方法。
public class Animal {
private String food;
public Animal(){}
public void eat(String food){this.food=food;}
public String getFood(){
return food;
}
public void setFood(String food){
this.food=food;
}
}
public class Dog extends Animal{
public void eat(String food){System.out.println("狗吃"+food);}
public void shouMen(){
System.out.println("狗在守门");
}
}
public class Cat extends Animal{
public void eat(String food){System.out.println("猫吃"+food);}
public void fishing(){
System.out.println("猫在钓鱼");
}
}
public class Test {
public static void main(String[] args){
Cat cat=new Cat();
Dog dog=new Dog();
dog.eat("bone");
dog.shouMen();
cat.eat("fish");
cat.fishing();
}
}
解析:
- 在编译时,子类
Dog
和Cat
中的构造方法中Animal
类的eat
方法完全相同,均为public void eat(String food){}
,其进行了静态绑定。 - 运行时,
Cat
和Dog
类中的fishing
和shouMen
构造方法在父类是没有的,其进行了动态绑定。