2013-05-09 124 views
1

我有一个类Test,其变量计数为0. 测试类由类A和B扩展。 我设置了count在A为50. 现在我想访问B中的计数,它应该返回值为50,但我在B得到0。 我是新来的Java,我不知道它是如何工作:( 任何一个可以帮助我如何实现这一点?:(类如何使用子类修改父类变量并在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); 
} 
+0

为什么你认为b.count应该返回50? b扩展不是a。 – nakosspy 2013-05-09 19:14:28

+1

使计数静态。 – Adarsh 2013-05-09 19:20:53

回答

0

b,你都可以从Extendcount,这是w ^它是0。你可以这样做:

class b extends a { 

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

} 
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;这样的代码。我假设这不是你真正的代码。

+0

是的,它不是真正的代码。只是参考。如果你发现syntac问题,请给ingore。 – Muthukumar 2013-05-09 19:21:30

+0

你的建议效果很好。感谢有价值的信息 – Muthukumar 2013-05-09 19:21:51

1

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

您得到0作为一个值,因为在B类中,您没有设置B类的本地变量count的值。因此,您尝试读取的count的值将从Extend超类继承。

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

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 
0

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

考虑这些类:

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   
相关问题