gpt4 book ai didi

java继承处理字段

转载 作者:行者123 更新时间:2023-11-30 03:51:27 25 4
gpt4 key购买 nike

假设我有这个代码

public class A {
String name = "a";
public void one(){
System.out.println(name);
}
public void two(){
System.out.println(name);
}
public static void main(String[] args){
A a = new A();
B b = new B();
b.one();
}
}

class B extends A{
String name="b";
public void two(){
System.out.println(name);
}
}

我不明白为什么 b.one() 总是产生“a”。根据我对继承的了解,B 将看到它没有自己的 one() 副本,因此它将是 super.one()。 super.one() 将打印出该类中变量 name(a) 的值。但是 B 不会看到它也有一个值为“b”的名称变量,所以它不会去那个吗?我很困惑,因为我知道这个逻辑适用于方法调用。谁能澄清一下吗?

最佳答案

您自己的问题已经部分回答了。当您执行 super.one() 时,您就不再处于“B”中。因此,为什么您会期望 name 中除了“a”之外还有其他任何内容。调用父类(super class)后引用的nameA 的名称。如果 namepublicprotected 并且您没有重新定义,您可以在子类中更改 name 的值。声明一下。

public class A
{
protected String name;

public void printName()
{
System.out.println(name);
}
}

public class B extends A
{
public B()
{
name = "b";
}
}

public class Main
{
public static void main(String [] args)
{
B b = new B();
b.printName();
}
}

上面的代码将打印“B”。

关于java继承处理字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347939/

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