为什么我不能用这个程序重新分配父变量?

时间:2015-07-10 15:17:06

标签: java inheritance this variable-assignment super

package accesslevelmodifiers;

public class AccessLevelModifiers {

    public static void main(String[] args) {

    Parent parent =new Parent();
    Subclass subclass = new Subclass();
    parent.go();
    subclass.go();

    System.out.println("===========");

    subclass.setNumberPu(3);
    parent.go();
    subclass.go();
    }
}


public class Parent {

    public int NumberPu=100;

    public void go(){
        System.out.println(NumberPu);
    }
}

class Subclass extends Parent{

    public void setNumberPu(int NumberPu) {
        super.NumberPu = NumberPu;
    }


}

它成功建造并运行;但结果是

 100
 100
 ===========
 100
 3

我对两件事感到困惑。 1.为什么我可以在子类中使用super.NumberPu?我的意思是,如果我写

class Subclass extends Parent{
        super.NumberPu = 3;   
}

IDE会说无法找到符号。

  1. 我使用了super,所以我认为父级中NumberPu的值将被指定为3,而是分配给子类中的值。谁能告诉我发生了什么?怎么来超级。成了这个。 ? 非常感谢你!

2 个答案:

答案 0 :(得分:0)

此处有两个不同的对象,因此当您更改其中一个对象的数量时,另一个不会因为无关

Parent parent =new Parent();
Subclass subclass = new Subclass();

了解您如何在此处使用newnew运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类。所以你有两个不同的记忆,完全不相关。

答案 1 :(得分:0)

  1. 您可以在类级别声明声明(例如,向子类添加新变量)但不能声明语句。在这里,您没有声明一个新变量,您为现有变量赋值,因此应该在构造函数中完成,这很好。
  2. 你混淆了类和实例。您的父对象和子类对象是两个不同的实例,修改一个不影响另一个,它们是具有不同成员字段实例的两个不同对象。 super是一种在模糊不清的情况下引用超类中的字段的方法,this是引用当前实例,因此它们处于两个不同的级别。