我很困惑超级.i = j+1;这行代码。我认为它只改变了A类中的变量i,并没有改变B类中的继承变量i。为了使问题清楚,我添加了另一个示例(示例 2)。在示例 2 中,我们使用超级(余额,名称);初始化从父类继承的属性。当我们调用 super 并更改变量 balance 和 name 时,我们不会更改父类中的变量 balance 和 name。在示例 1 中,我们使用超级.i = j+1;我们实际上更改了父类中的变量 i,而不是从父类继承的变量 i。这两个样本有什么区别?太感谢了。2019-07-18 编辑我在示例2中添加了一个diriver类。我们在CheckingAccount中创建一个对象c后,c中的余额为200,名称为“XYZ”。我们在子类中使用 super(argument),我们是否更改超类中的余额和名称?如果不是,为什么要更改样本 1 中的变量 i?//Sample oneclass 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 classpublic class BankAccount { protected double balance=0; protected String name="ABC"; public BankAccount(double balance, String name) { this.balance = balance; this.name = name; }}//child classpublic 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 classpublic class DriveClass { public static void main(String[] args) { CheckingAccount c = new CheckingAccount(200,"XYZ",true);}}输出是2 3
2 回答
青春有我
TA贡献1784条经验 获得超8个赞
这是iB 类中隐藏i在 A 类中的位置。 和this.i是super.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
}
}
千万里不及你
TA贡献1784条经验 获得超9个赞
超级(余额,名称)
这就调用了父类的构造函数来初始化父类中的变量balance和name。是的,确实改变了父类中balance和name的值
超级.i = j+1
这将 j+1 分配给父类变量 i。
一种是通过构造函数初始化父类变量,另一种是直接给父类变量赋值。两者不同
添加回答
举报
0/150
提交
取消