多态之方法和属性
多态之方法和属性
代码如下:
class Animal{
int id=1;
void eat(){
System.out.println("吃东西");
}
}
class Dog extends Animal{
int id=2;
void eat(){
System.out.println("吃骨头");
}
}
class Main{
public static void main(String[] args) {
Animal dog=new Dog(); //1
dog.eat(); //2
System.out.println(dog.id); //3
}
}
运行结果:
吃骨头
1
分析:
在1处,左边声明的是Animal,右边new的是Dog,实例dog的类是Dog。
在2处,调用方法,方法有多态性,编译时看左边,只能调用Animal中的方法,运行时看右边,Animal中有eat(),而且Dog重写过,所以调用的是Dog的eat(),体现了多态性,如果子类中添加了sleep方法,父类中没有,那么Animal dog=new Dog()这种写法的前提下,dog.sleep就会报错,因为声明的是Animal,Animal中并没有这个方法。
在3处,调用属性,属性无多态性,编译运行都看左边,所以输出的是Animal的id。

浙公网安备 33010602011771号