编译时多态性和运行时多态分别指什么?

  • A+
所属分类:JAVA


共计 928 个字符,预计需要花费 3 分钟才能阅读完成。

什么是多态

允许不同子类型的对象对同一消息作出不同的响应,换句话说就是同一个对象引用调用相同的方法,而该方法实现方式不同,运行得到的结果也就会不同;

编译时多态(也叫前绑定)

方法重载(overload

 /**
 * @author plm
 * @create 2021/3/1 23:40
 */
class OperatorNumber {

    void print(int a, int b) {
        System.out.println("int : " + (a + b));
    }

    void print(long a, long b) {
        System.out.println("long : " + (a + b));
    }

    void print(String a, String b) {
        System.out.println("String : " + (a + b));
    }
}

class Demo {
    public static void main(String[] args) {
        OperatorNumber operatorNumber = new OperatorNumber();
        operatorNumber.print(1, 4);
        operatorNumber.print(2L, 5L);
        operatorNumber.print("2", "2");
    }
}

/* 输出
int : 5
long : 7
String : 22
 */

运行时多态(也叫后绑定)

方法重写(override

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

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

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

class AnimalDemo {
    public static void main(String[] args) {
        //运行时多态
        Animal a = new Cat();
        a.eat();

        a = new Dog();
        a.eat();
    }
}

/* 输出
猫吃鱼
狗啃骨头
 */
运行时多态的前提

要有继承或实现关系
要有方法的重写
要有父类引用指向子类对象

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: