繁体   English   中英

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

[英]how to modify parent class variable with the child class and use in another child class in 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); 
} 

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

您可以更改b以扩展类a而不是类Extend 随后的任何实例b会看到什么时初始化做a构造函数执行。

如果希望所有类或其子类的实例共享相同的count ,则需要将该字段设为static

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

在子类中,您将在没有this.情况下引用字段名称this. 作为资格赛。

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

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

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

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

b类中,你从Extend得到count ,这就是它为0的原因。 你可以这样做:

class b extends a {

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

 }
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

你可以把它变成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        

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM