关于Java中的继承

时间:2019-07-18 02:16:57

标签: java inheritance super

我对

感到困惑
  

super.i = j + 1;

这行代码。我认为它只会更改A类中的变量i,而不会更改B类中的继承变量i。

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

  

super(balance,name);

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

在示例1中,我们使用

  

super.i = j + 1;

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


编辑于2019年7月18日

我在示例2中添加了一个diriver类。在CheckingAccount中创建对象c后,c中的余额为200,名称为“ XYZ”。我们在子类中使用super(参数),是否在父类中更改了余额和名称? 如果没有,为什么要更改示例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

2 个答案:

答案 0 :(得分:0)

这是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
   }
}

答案 1 :(得分:0)

  

超级(余额,名称)

这称为父类的构造函数,以初始化父类中的变量balance和name。是的,它确实更改了父类中的余额和名称的值

  

super.i = j + 1

这将j + 1分配给父类变量i。

一个通过构造函数初始化父类变量,另一个是直接将值分配给父类变量。两者都不一样