java 多态 总结

1.前言

引用教科书解释:

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。

 

 

通俗来说:

总结:多态的抽象类与接口有点相似;

父类不需要具体实现方法,仅需要定义即可,需要在单独的类继承后成为子类,在子类实现具体方法,
调用父类方法可直接执行子类的重写方法,
可被多个不同的类继承,
子类可直接赋值给父类,但是父类需要强转子类 ,如果一个父类下面有多个子类,那么 父类强转子类之前需要确认此刻
父类是由哪个系类赋值的后才可以转到对应的子类,否则会报错。 可见父类可拥有多种状态,因此,这就称为多态。

 

2.操作

(1)目录结构

 

 (2)配置一个抽象父类

package com.example.javabaisc.myAbstract;

abstract class Food {
    abstract void food();
}
View Code

(3)配置两个子类

package com.example.javabaisc.myAbstract;

public class Apple extends Food {
    //重新父类
    @Override
    void food() {
        System.out.println("苹果");
    }

    void color(){
        System.out.println("red");
    }
}
Apple
package com.example.javabaisc.myAbstract;

public class Banana extends Food{
    //重写父类
    @Override
    void food() {
        System.out.println("香蕉");
    }
    void color(){
        System.out.println("yellow");
    }
}
Banana

(4)测试类

package com.example.javabaisc.myAbstract;

import org.junit.jupiter.api.Test;

public class AbstractTest {

    @Test
    public void t(){
        // 子类向父类转型
        Food food = new Apple();
        food.food();
        //父类向子类转型
        Apple apple = (Apple)food;
        apple.color();
        System.out.println("//==================================");
        // 子类向父类转型后作为参数输入
        this.eat(new Apple());
        this.eat(new Banana());

    }

    private void eat(Food food){
        //执行父类的方法,然后执行子类的重写方法
        food.food();
        //因为有一个父类被两个不同的子类继承,因此需要判断此时父类是与哪个一类为同一类的,然后才能强制转成子类,成为子类才可以调用子类方法
        if (food instanceof Apple){
            Apple apple = (Apple)food;
            apple.color();
        }else if(food instanceof Banana){
            Banana banana = (Banana)food;
            banana.color();
        }
    }

}
test

3.测试

 

posted @ 2020-06-12 04:46  岑惜  阅读(106)  评论(0编辑  收藏  举报