如何使用子类修改父类变量并在java中的另一个子类中使用

时间:2013-05-09 19:09:32

标签: java

我有一个类,其变量计数为0。 测试类由A类和B类扩展。 我将A中的计数设置为50。 现在我想访问B中的计数,它应该将值返回为50,但是我在B中得到0。 我是java的新手,我不知道它是如何工作的:( 任何人都可以帮我解决这个问题吗? :(

Public Class Extend { 
    public int count =0; 
} 


Public class a extends Extend { 
    this.count = 50; 
 }  

public class b extends Extend { 
   system.out.println ( " count is " + count); 
} 

5 个答案:

答案 0 :(得分:3)

Extend的每个实例(包括扩展它的任何类的实例)都会获得自己的count副本。实例之间不共享这些值。

您可以更改b以扩展课程a,而不是课程Extend。然后,b的任何实例都会看到执行a构造函数时所做的任何初始化。

如果您希望类或其子类的所有实例共享相同的count,则需要创建字段static

public class Extend {
    public static int count = 0;
}

在子类中,您可以引用不带this.的字段名作为限定符。

请注意,您发布的代码不是合法的Java。前两个类应为public class,而不是Public ClassPublic class。此外,您不能在方法或初始化程序块之外使用this.count = 50;之类的代码。我假设这不是你真正的代码。

答案 1 :(得分:1)

尝试从this网站开始进行Java继承。

您将0作为值,因为在B类中您没有设置B类的局部变量count的值。因此,您尝试读取的count的值将从Extend超类继承。

但是,您将A类中count的值设置为50,但该变量仅对A类是本地的,并且在此关系中不能由B类访问。

答案 2 :(得分:0)

在课程b中,您从count获得了Extend,这就是0的原因。你可以这样做:

class b extends a {

    System.out.println("count: " + count);

 }

答案 3 :(得分:0)

Public Class Extend { 
    public int count = 0; 
} 

Public class A extends Extend { 
    this.count = 50; 
}  

public class B extends Extend {
   public void showMessage() {
       //this will print 0 if you don't change count value in your main method
       system.out.println ("count is " + this.count); 
   } 
} 

尝试使用它:

Public Class Extend { 
    public int count = 0; 
}

Public class A extends Extend { 
    this.count = 50; 
}  

public class B extends Extend { 
   private Extend myExtend;

   public B(Extend myExtend) {
       this.myExtend = myExtend;
   }

   public void showMessage() {
       system.out.println (" count is " + this.myExtend.count);
   }  
} 

现在在你的主要课程中你可以使用这个

Extend eA = new A();

Extend eB = new B(eA);

eb.showMessage(); //this will print 50

答案 4 :(得分:0)

你可以static。实例之间共享static个字段;如果您更改子类中的一个静态变量,,那么之后创建的所有子类的实例将共享更改的值。

考虑这些课程:

Father.java

class Father {                              
    protected static int i;                 
    public Father() {                       
        System.out.println("Father: " + i); 
    }                                       
}

Child.java:

class Child extends Father {
    public Child() {
        i = 4;
        System.out.println("Child: i: " + i);
        System.out.println("Child: this.i: " + this.i);
        System.out.println("Child: super i: " + super.i);

    }
}

Daughter.java:

public class Daughter extends Father {
    public Daughter() {
        System.out.println("Daughter: i: " + Daughter.i);
    }
}

Main.java:

class Main {
    public static void main(String[] args) {
        System.out.println("First daughter");
        Daughter daughter = new Daughter();
        Father father = new Father();
        Child child = new Child();
        System.out.println("Second daughter");
        Daughter daughter2 = new Daughter();
    }
}

输出:

First daughter         
Father: 0              
Daughter: i: 0         
Father: 0              
Father: 0              
Child: i: 4            
Child: this.i: 4       
Child: super i: 4      
Second daughter        
Father: 4              
Daughter: i: 4