多态之方法和属性

多态之方法和属性

代码如下:

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。

posted @ 2020-09-25 11:52  xsyz  阅读(295)  评论(0编辑  收藏  举报