欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习:多态

程序员文章站 2024-03-21 19:20:16
...

多态:就是指一种事物,在不同时刻,所表现出来的不同状态。
在我们编写程序时,经常会发现一个父类的许多子类继承了父类的功能,但不同的子类所体现出的功能却不尽相同,例如经典的猫狗案例。
多态的前提:
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,父类肯定不能直接调用子类的特有功能,这也是多态的弊端所在,如果要调用这两个方法,就必须按照程序所示,进行向下转型。
多态的成员访问特点:
多态形式去访问成员变量:编译看左边,运行也看左边
多态形式去访问成员方法:编译看左边,运行看右边
多态形式去访问静态方法:编译看左边,运行也看左边
多态形式的构造方法:创建子类对象,同样会先访问父类的构造方法
私有化构造,外界不能借助构造方法来创建对象

相关标签: Java基础