gpt4 book ai didi

java - java中的继承规则

转载 作者:行者123 更新时间:2023-11-30 06:01:32 26 4
gpt4 key购买 nike

我有一个关于 java 基础知识的问题。我在每个类中都有 s 属性。当我使用访问器 (getS()) 时,类实例获取的 s 值不同。这种情况有规则吗?

主要的输出是:

x.s  = One
x.getS() = Three

类定义:

package com;

import com.Test1.A;
import com.Test1.B;

public class Test1
{
public static class A
{
public static String s = "One";
public int x = 10;

public String getS()
{
return this.s;
}
}

public static class B extends A
{
public final String s = "Two";
public String getS()
{
return this.s;
}
}

public static class C extends B
{
public static int x = 1;
public static String s = "Three";

public String getS()
{
return this.s;
}
}

public static void main(String [] args)
{

A x = new C();
System.out.println("x.s = "+x.s);
System.out.println("x.getS() = "+x.getS());
}
}

最佳答案

字段(x.s)的访问是通过x的编译时类型(A)来解析的,所以Ax ["One"] 被返回)。

通过getter(x.getS())的访问是通过x的运行时类型(C)来解析的,所以Cx [“三”] 被返回)。

其他一些例子:

  • ((B) x).s 将返回 "Two"
  • ((C) x).s 将返回 "Three"
  • ((A) x).getS() 将返回 "Three"
  • ((B) x).getS() 将返回 "Three"

(我把为什么留给读者作为练习)

顺便说一句:当

  • staticA 中的 String s = "One" 中移除,或者
  • 方法 public String getS() 从类 BC 中删除,或者
  • 以上都是

请阅读@Mike Nakis' answer

关于代码的最后一点说明:import 语句可以删除。

关于java - java中的继承规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57244660/

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