多态之方法和属性
多态之方法和属性
代码如下:
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。