【JAVA】多态性特点

多态(polymorphism)

多态: 同一个对象,在不同时刻表现出来的不同形态。
计算机运行时,相同的动作可能会在多个不同的类别对象,系统可根据不同类别中的对象,引发对应类别的方法,而有不同的行为。
举例:
通常我们说:猫 cat = new 猫();
多态中说:动物 animal = new 猫();
这里的猫在上面表现的是猫态,下面表现的是动物态,这就是多态。

多态的前提和体现:
a、有继承/实现关系
b、有方法重写
c、有父类引用指向子类对象[例:动物 animal = new new 猫();]

多态中成员访问特点:
成员变量: 编译看左边,执行看左边
成员方法: 编译看左边,执行看右边
为什么成员方法和成员变量不一样: 成员方法有重写,成员变量则没有。

多态中的转型:
向上转型 从子到父、父类引用指向子类对象:[动物 animal = new Cat();]
向下转型 从父到子、父类引用转为子类对象: [Cat c = (Cat)animal;]

e.g.:Animal(父类) AnimalOperator(操作方法类) Cat(子类) Dog(子类) ploy_Demo(main)
Animal(父类):

public class Animal {

    public void eat(){
        System.out.println("动物吃东西");
    }
}

AnimalOperator(操作方法类):

public class AnimalOperator {

    public void useAnimal(Animal a){
//        编译看左边,运行看右边; 使用父类型作为参数,调用的时候使用子类型
//        Animal a = new Cat();
//        Animal a = new Dog();
        a.eat();
    }
    
}

Cat(子类):

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

Dog(子类):

public class Dog extends Animal{

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

ploy_Demo(main):

public class ploy_Demo {
    public static void main(String[] args) {
        //创建动物操作类的对象,调用方法
        AnimalOperator ao = new AnimalOperator();
        Cat c = new Cat();
        ao.useAnimal(c);

        Dog d = new Dog();
        ao.useAnimal(d);

    }
}

运行结果:

猫吃鱼
狗吃肉

猜你喜欢

转载自blog.csdn.net/joker_Ling/article/details/107874661