gpt4 book ai didi

这个的 Java 实现 - 调用父类方法来利用子类数据成员

转载 作者:行者123 更新时间:2023-11-29 04:45:09 26 4
gpt4 key购买 nike

这个问题是关于Java中superthisImplementation Decision。考虑一下,

父类包含一个变量name和一个方法getName()

public class Parent {

protected String name = "Parent";

protected String getName(){
return this.name;
}
}

子类继承父类但有自己的name变量

public class Child extends Parent {

protected String name = "Child";

protected void printNames() {
System.out.println("Parent: " + super.getName());
System.out.println("Child: " + this.getName());
}

public static void main(String[] args) {

Child c = new Child();
c.printNames();
}
}

输出:

Parent: Parent
Child: Parent

从输出中,我们可以看到:getName() 方法从具有 super 上下文的 Child 类调用时,它返回“Parent”,但是当使用 this 上下文调用时,它再次返回“Parent”

如果该方法只出现在父类中,但具有相同访问修饰符的数据成员出现在两者中,

为什么 Child 类的 this.getName() 不应该返回“Child”,因为它 is-a Parent 因此有 getName() 作为它的方法

更新这个问题不是关于如何打印或覆盖“Child”,而是关于核心 Java 团队对 this 的实现决定,以及它是为他们准备的。

最佳答案

字段不是可覆盖的 只有方法是,字段只能隐藏或不隐藏。 this 实际上是指 Parent#getName() 方法中属于 Parent 类型的当前 Object 这样它将获取在 Parent 或潜在父类中定义的变量名称的值,但不会在 Child 等子类中获取。

这是一个简单的代码片段,展示了这个想法:

Child child = new Child();
// Show the variable name of the class Child
System.out.println(child.name);
// Show the variable name of the class Parent which is what this.name
// does in the getName method
System.out.println(((Parent)child).name);

输出:

Child
Parent

关于这个的 Java 实现 - 调用父类方法来利用子类数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37499590/

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