Java学习:多态

多态:就是指一种事物,在不同时刻,所表现出来的不同状态。
在我们编写程序时,经常会发现一个父类的许多子类继承了父类的功能,但不同的子类所体现出的功能却不尽相同,例如经典的猫狗案例。
多态的前提:
1.要有继承
2.要有方法重写,不重写也可以,但是就失去了多态的意义
3.父类引用指向子类对象
我们可以通过一个程序来做以了解

public class Animal {
    public String name;
    public int age;
    public  void eat(){
        System.out.println("吃饭");
    }
    public  void sleep(){
        System.out.println("睡觉");
    }
}
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    @Override
    public void sleep() {
        System.out.println("猫白天睡觉");
    }
    public void catchmouse(){
        System.out.println("抓老鼠");
    }

}
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }

    @Override
    public void sleep() {
        System.out.println("狗晚上睡觉");
    }
    public  void lookdoor(){
        System.out.println("狗看门");
    }
}
public class Function {
    public  static void show(Animal an){
        System.out.println(an.name+"     "+an.age);
        an.eat();
        an.sleep();
    }
}
public class Test {
    public static void main(String[] args) {
        Animal an = new Cat();
        an.name="汤姆";
        an.age=3;
       Function.show(an);
        ((Cat) an).catchmouse();
        System.out.println("---------------------------------------");
        an=new Dog();
        an.name="旺财";
        an.age=4;
       Function.show(an);
        ((Dog) an).lookdoor();
    }
}
汤姆     3
猫吃鱼
猫白天睡觉
抓老鼠
---------------------------------------
旺财     4
狗吃肉
狗晚上睡觉
狗看门

在这个程序中我们可以看到,Cat类和Dog类都有自己的特有方法,而对象的引用却是Animal,父类肯定不能直接调用子类的特有功能,这也是多态的弊端所在,如果要调用这两个方法,就必须按照程序所示,进行向下转型。
多态的成员访问特点:
多态形式去访问成员变量:编译看左边,运行也看左边
多态形式去访问成员方法:编译看左边,运行看右边
多态形式去访问静态方法:编译看左边,运行也看左边
多态形式的构造方法:创建子类对象,同样会先访问父类的构造方法
私有化构造,外界不能借助构造方法来创建对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值