gpt4 book ai didi

java - java支持编译时多态吗?

转载 作者:行者123 更新时间:2023-12-02 09:18:52 25 4
gpt4 key购买 nike

根据我的理解,根据OOPS概念,只有虚函数支持运行时多态性,并且在java中,除了标记为private、final和static之外的所有函数默认都是虚函数。

那么这是否意味着,java不支持编译时多态性?

如果确实如此,那么我们可以假设它违反了 OOP 原则。

最佳答案

方法重载是一种编译时多态性。由于父类(super class)型可以有多个子类型实现,因此编译器会在编译时确定要调用哪个类型,因为所有方法都是在编译时绑定(bind)的

例如:

public class GamePlayer {

public void doSomething(Worker worker) {
System.out.println("I'm a worker");
}

public void doSomething(Teacher teacher) {
System.out.println("I'm a Teacher");
}

public void doSomething(Principal principal) {
System.out.println("I'm a Principal");
}

public static void main(String[] args) {

GamePlayer example = new GamePlayer();
Worker principal = new Principal();
Worker teacher = new Teacher();

example.doSomething(principal);
example.doSomething(teacher);
}
}

您期望的输出为

I'm a Principal
I'm a Teacher

但是,实际输出将是

I'm a worker
I'm a worker

原因::这里的类型是在编译时决定的。尽管对象是校长和教师的实例,但引用是 worker 类型。因此编译器选择 doSomething(Worker worker) 方法,因为它接受相同类型的引用类型 (Worker)..

关于java - java支持编译时多态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com