4

我有一个类Test,其变量计数为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); 
} 
4

4 回答 4

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;在方法或初始化程序块之外拥有代码。我假设这不是您的真实代码。

于 2013-05-09T19:12:35.727 回答
1

你可以做到staticstatic字段在实例之间共享;如果您更改子类中的一个静态变量,则父亲,因此,之后创建的所有子类的实例将共享更改的值。

考虑这些类:

父亲.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);

    }
}

女儿.java:

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

主.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        
于 2018-02-21T09:40:43.653 回答
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
于 2013-05-09T19:54:12.370 回答
0

在课堂b上你得到了count来自Extend,这就是它的原因0。你可以这样做:

class b extends a {

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

 }
于 2013-05-09T19:12:28.607 回答