gpt4 book ai didi

java - 当我创建具有不同类名和不同构造函数名称的对象时,如何调用方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:48 24 4
gpt4 key购买 nike

package override;

class Super
{
public void dosomething()
{
System.out.println("hello Super");
}
}

class sub
extends Super
{
@Override
public void dosomething()
{
System.out.println("hello sub");
}
}

public class Main
{
public static void main(String[] args)
{
Super p1=new Super();
Super p2=new sub(); // Please explain why this line is correct as constructor and //class name should be same
p1.dosomething();
p2.dosomething();
}
}

当我创建具有不同类名和不同构造函数名称的对象时,如何调用方法。就像上面突出显示的语句有不同的调用构造函数的方式

最佳答案

 Super p2=new sub();
p2.doSomething();

这称为运行时多态性(方法重写)。

编译器不会调用由变量类型(即本例中的 super)定义的方法。此行为称为虚拟方法调用,并演示了 Java 语言中重要的多态性功能的一个方面。

http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

对象 p2 的类型为 Super。但p2指的是sub。因此编译器在运行时运行子类中的 doSomething() 。父类(super class)有方法 doSomething()。

但是如果你在 sub 中说 eat()

Super p2=new sub();
p2.eat(); // not possible

父类(super class)没有 eat() 方法。

关于java - 当我创建具有不同类名和不同构造函数名称的对象时,如何调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16097288/

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