gpt4 book ai didi

java - 关于java中的继承

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

我很困惑

super.i = j+1;

这行代码。我认为它只改变了A类中的变量i,并没有改变B类中继承的变量i。

为了使问题更清楚,我添加了另一个示例(示例 2)。在示例 2 中,我们使用

super(balance,name);

初始化从父类继承的属性。当我们调用super并更改变量balance和名称时,我们不会更改父类中的变量balance和名称。

在示例 1 中,我们使用

super.i = j+1;

我们实际上改变的是父类中的变量i,而不是从父类继承的变量i。这两个样本有什么区别?非常感谢。

<小时/>

编辑于2019年7月18日

我在示例2中添加了一个驱动类。在CheckingAccount中创建对象c后,c中的余额为200,名称为“XYZ”。我们在子类中使用 super(argument),我们是否更改父类(super class)中的余额和名称?如果不是,为什么示例 1 中的变量 i 会改变?

//Sample one
class A{
int i;
}

class B extends A{
int j;
void display() {
super.i = j+1;
System.out.println(j+ " "+i);
}
}

public class CC {

public static void main(String[] args) {
// TODO Auto-generated method stub
B obj = new B();
obj.i =1;
obj.j = 2;
obj.display();
}

}
//sample 2
//parent class
public class BankAccount {

protected double balance=0;
protected String name="ABC";

public BankAccount(double balance, String name) {
this.balance = balance;
this.name = name;
}
}

//child class

public class CheckingAccount extends BankAccount{
final int CHARGE = 5;
final int NO_CHARGE = 0;
private boolean hasInterest;

public CheckingAccount(double balance, String name, boolean hasInterest) {
super(balance,name);
this.hasInterest = hasInterest;
}
}

//driver class
public class DriveClass {

public static void main(String[] args) {
CheckingAccount c = new CheckingAccount(200,"XYZ",true);
}
}

输出为

2 3

最佳答案

这里是 B 类中的 i 隐藏 A 类中的 i 的地方。还有 this.isuper.i不同。

class A {
int i;

void print() {
System.out.println("i = " + i);
}
}

class B extends A {
int j;
int i;

void display() {
i = j + 1;
super.i = 1000;
System.out.println(j + " " + i);
print(); // this will print the i in A
}
}

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

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