关于java中的继承

我很困惑

超级.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 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


皈依舞
浏览 82回答 2
2回答

青春有我

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

千万里不及你

超级(余额,名称)这就调用了父类的构造函数来初始化父类中的变量balance和name。是的,确实改变了父类中balance和name的值超级.i = j+1这将 j+1 分配给父类变量 i。一种是通过构造函数初始化父类变量,另一种是直接给父类变量赋值。两者不同
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java