java多态的两种表现形式(多态有几种表现形式)

多态的概念

Java多态是指,一个对象可以表现出多种形态。具体来说,就是同一个方法可以根据不同的对象有不同的表现形式。这种表现形式分为两种:编译时多态和运行时多态。

编译时多态

编译时多态也称作静态绑定,指的是方法绑定在编译阶段。在编写代码时,编译器根据变量的类型确定它的方法,如果该方法不存在则编译期就会报错。在编译时多态中,方法的调用是静态绑定的,也就是说,方法重载会根据方法签名来判断调用哪个方法,而不是根据变量的实际类型来决定调用哪个方法。

看下面的代码:

//父类
public class Animal {
    public void eat() {
        System.out.println("I'm eating food.");
    }
}

//子类
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("I'm eating fish.");
    }
}

//测试类
public class Test {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
    }
}

在这个例子中,编译时多态可以看出来。new Cat()创建一个Cat对象,但是animal变量的类型为Animal。在调用animal.eat()方法时,由于animal的类型是Animal,编译器会查找其在父类Animal中的eat()方法,然后调用Cat类中覆盖Animal类中的eat()方法,因此输出结果是“ I'm eating fish.”。

运行时多态

运行时多态也称作动态绑定,指的是方法绑定在运行阶段。在运行时多态中,方法的调用是动态绑定的,也就是说,它会根据变量的实际类型来决定调用哪个方法。在Java中,当利用子类对象调用方法时, JVM会先根据对象的类型找到相应的方法,然后再调用相应的方法。

java多态的两种表现形式(多态有几种表现形式)

看下面的代码:

//父类
public class Animal {
    public void eat() {
        System.out.println("I'm eating food.");
    }
}

//子类
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("I'm eating fish.");
    }
}

//测试类
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal();
        Animal animal2 = new Cat();
        Cat cat = new Cat();
        
        animal1.eat();
        animal2.eat();
        cat.eat();
    }
}

在这个例子中,运行时多态可以看出来。我们创建了一个Animal类和一个Cat类,其中Cat是Animal的子类。我们创建了一个animal1对象和一个animal2对象。animal1是Animal类的一个实例,它的类型和变量的类型是Animal。animal2是Cat的一个实例,它的类型是Animal,但是变量的类型是Cat。

animal1.eat();

由于animal1的类型是Animal,它会调用Animal类中的eat()方法。因此,输出结果是“I'm eating food.”

animal2.eat();

由于animal2的类型是Animal,但是它所引用的对象是Cat类型,因此JVM会调用Cat类中的eat()方法,输出结果是“I'm eating fish.”

cat.eat();

cat是Cat类的一个实例,因此会直接调用Cat类中的eat()方法,输出结果是“I'm eating fish.”

总结

Java的多态性使得代码更加灵活和可复用。编译时多态和运行时多态都是多态的两种表现形式。编译时多态是在编译时变量具有多个不同的类型,而运行时多态是实际上的方法在运行时被决定。在编写代码时,我们应该根据实际情况选择适当的多态表现形式。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/javahaxjava.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年4月24日 下午8:52
下一篇 2023年4月24日 下午8:52

猜你喜欢