gpt4 book ai didi

java - 为什么方法返回子类对象却调用父类(super class)变量?

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

我知道该变量不具有多态性。如果我们执行 new Subclass().x 那么值 20 将在运行时打印。但这里

Parent p = new Child();   
p.getObject();

子类的getObject()会被调用,因为子类的getObject会覆盖父类(super class)的getObject()。所以子类方法getObject()返回new Child(),所以打印的值应该是Child.x的值,即20。但是输出是10。为什么x的值是父类(super class)的值???我知道有些帖子与此相关,但在任何地方都没有完全解释这一点。请帮忙。

class MainClass {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.getObject().x);
}
}

class Parent {
int x = 10;

public Parent getObject() {
return new Parent();
}
}

class Child extends Parent {
int x = 20;

public Child getObject() {
return new Child();
}
}

最佳答案

您正在访问 Parent 类中的变量 x,因为 p.getObject()声明类型Parent

顺便说一句:直接访问对象内部的变量违反了 OOP 最基本的原则:信息隐藏/封装!您应该仅对用作纯数据容器且没有自己的业务逻辑的数据传输对象/ValueObject 执行此操作。即使在那里,您也应该使用 getter/setter 方法而不是直接变量访问...

关于java - 为什么方法返回子类对象却调用父类(super class)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44541112/

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