gpt4 book ai didi

java - 继承和动态绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 04:29:53 26 4
gpt4 key购买 nike

有人可以解释一下这里发生了什么以及为什么吗?

class Base{
private float f = 1.0f;
void setF(float f1){ this.f = f1; }
float getF() {return f;}
public void xx(){}
}

class Base2 extends Base{
private float f = 2.0f;

public void xx(){
System.out.println(super.getF()+" "+this.getF());
}

//float getF() {return f;} //1
//void setF(float f1){ this.f = f1; } //2

public static void main(String[]args){
Base b=new Base2();
b.setF(3);
b.xx();
System.out.println(b.getF());
System.out.println(((Base)b).getF());
}
}

此代码的输出将为3 3, 3, 3

如果我仅使用 getter 取消注释第 1 行,输出将为 3 2, 2, 2

如果我仅使用 setter 取消注释第 2 行,输出将为 1 1, 1, 1

如果我取消注释第 1 行和第 2 行(使用 setter 和 getter),输出将为 1 3, 3, 3

        //default output: 3 3, 3, 3
//with getter: 3 2, 2, 2
//with setter: 1 1, 1, 1
//with getter and setter: 1 3, 3, 3

如果用子类中的代码重写父类中的方法,则该重写方法无法访问私有(private)成员变量,即使父类中被重写的方法可以访问私有(private)成员变量。不过,子类中的重写方法可以调用父类中的重写方法。

因此,请解释具有 getter 和 setter 的 case#4,它们只能访问 Base2 成员变量

最佳答案

你得到3 3 3 3,因为set/get方法修改了Base.f变量:

您得到 3 2 2 2 因为设置了 Base.f 变量的更改值,但 get 方法获取了 Base2.f 变量的值.

您得到1 1 1 1,因为set方法更改了Base2.f变量的值,但get方法获取了Base.f的值变量。

您得到 1 3 3 3 因为 super.getF() 返回 Base.f 变量的值,但其他 get 方法返回值Base2.f 变量。还有 set 方法更改 Base2.f 变量的值。

关于java - 继承和动态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609345/

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