Java-多态(上)

什么是多态

同一方法可以根据发送对象的不同而采取多种不同的行为方式
一个对象实际类型是确定的 但指向其引用类型却有很多

注意事项

  1. 多态是方法的多态 属性没有多态
  2. 父类和子类 有联系 类型转换异常 ClassCastException
  3. 存在的条件
    • 继承关系
    • 方法需要重写
    • 父类的引用指向子类对象

场景假设

好比如你的 父亲 有三个儿子 儿子总有一方面长得和爹比较像
大儿子 皮肤比较黑 二儿子 皮肤比较黄 三儿子 皮肤比较白
有一种方法 一种一种判断
if skin == "黄" 是二儿子 if skin == "黑" 是大儿子 if skin == "白" 是三儿子
利用多态 不需要一个个判断 看到皮肤颜色就知道是谁
是因为Java实例方法是基于运行时的实际类型的动态调用 而非变量的声明类型


基类

package com.oop.demo09;


// 父亲类
public class Father {
    public void getSkin(){
        System.out.println("....");
    }
}

大儿子

package com.oop.demo09;

public class First extends Father {
    @Override
    public void getSkin() {
        System.out.println("我是老大  皮肤 比较黑");
    }
}

二儿子

package com.oop.demo09;

public class Second extends Father {
    @Override
    public void getSkin() {
        System.out.println("二儿子  皮肤 比较黄");
    }
}

三儿子

package com.oop.demo09;

public class Third extends Father {
    @Override
    public void getSkin() {
        System.out.println("三儿子 皮肤比较白");
    }
}

测试类

package com.oop;


import com.oop.demo09.Father;
import com.oop.demo09.First;
import com.oop.demo09.Second;
import com.oop.demo09.Third;

public class Applcation {
    public static void main(String[] args) {
        Father father = new Father();
        father.getSkin();
        System.out.println("====================");

        Father father1 = new First();
        father1.getSkin();
        System.out.println("====================");

        Father father2 = new Second();
        father2.getSkin();
        System.out.println("====================");

        Father father3 = new Third();
        father3.getSkin();

        /*
        * Father father3 = new Third();
        * 父类的引用指向子类的实例
        *
        * Third继承自Father 它拥有Father的非private得属性和方法
        * 其他子类也是一样的
        * 
        * 将Father得引用 指向Third得实例  完全ok
        * */
    }
}

输出
Java-多态(上)


没有每次判断 皮肤颜色 来 打印输出 不用管他是哪个儿子 只需要跟getSkin打交道就好了
利用多态的方式 即 一个类的多种形态 下面继承树
Java-多态(上)

小结

  1. 多态实现的基础 就是 继承 没有继承没有多态
  2. Java实例方法是基于运行时的实际类型的动态调用 而非变量的声明类型
  3. 多态 一个类的多种表现形式 一般用于接口
上一篇:javaSpringboot基础一


下一篇:面向对象编程OOP