gpt4 book ai didi

java - 为什么从父类打印字段,从子类打印方法(Java)

转载 作者:行者123 更新时间:2023-11-30 07:49:28 26 4
gpt4 key购买 nike

我有这样的父类和子类:

class Parent {

public String value = "Parent";

public String getValue() {

return value;
}
}

class Child extends Parent {

public String value = "Child";

public String getValue() {
return value;
}

}

public class Test {

public static void main(String[] args) {

Parent abc = new Child();

System.out.println(abc.value +" | "+abc.getValue());


}
}

如果我运行代码,结果是 Parent | child 。为什么会这样?为什么字段“值”来自父类而方法来自子类,而不是两者都来自子类?

最佳答案

Java 语言在设计时没有覆盖 字段的功能,但允许您覆盖方法 - 这是您无法通过字段获得多态效果的主要原因。当您在子类中具有覆盖方法(具有完全相同的签名和返回类型)时,会考虑多态性。由于字段不支持多态性,因此采用声明类中的字段:

Parent abc = new Child(); // declared type is Parent 

您可能想查看此链接 (https://docs.oracle.com/javase/tutorial/java/IandI/override.html) 以了解更多关于覆盖方法的信息:

子类中具有相同签名(名称,加上其参数的数量和类型)和返回类型的实例方法作为父类(super class)中的实例方法覆盖父类(super class)的方法.子类覆盖方法的能力允许类从行为“足够接近”的父类(super class)继承,然后根据需要修改行为。覆盖方法与它覆盖的方法具有相同的名称、参数数量和类型以及返回类型。覆盖方法还可以返回被覆盖方法返回的类型的子类型。此子类型称为协变返回类型。

有关何时考虑多态性的其他信息,您可以在此处找到:

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

关于java - 为什么从父类打印字段,从子类打印方法(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541337/

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