在我的班级B中,我希望能够使用班级A中的方法。这就是我尝试过的。
添加到我想要使用A类方法的方法
public void getAMethod(){ a.getTestValue; }
我的问题是:
我的问题是:
示例:A类 -
initialize = boolean test = false
当A类对话框打开时,设置test = true
创建方法
public boolean getTestValue() {
return test;
}
当我运行getTestValue时,从A类中,它始终是真的 在调用getTestValue时从B类开始,它总是返回false(即使打开了A类对话框)
似乎类b每次都在创建一个新的A类实例,所以它只能看到类A的默认值。当类B调用类A时,我需要得到类A的当前值,而不是默认值
修改 的 我将A类中的方法更改为静态,并修复了我遇到的问题。这对我来说是一个很大的帮助 - 感谢大家的建议!
答案 0 :(得分:2)
好的,还有相当多的理由可以覆盖,但我会尽量简短并依次回答每个问题。
<强> 1。这是正确的方法吗?
您通常需要在小程序中导入类。如果ClassA
和ClassB
位于同一个包中,或者它们都没有分配包但位于同一目录中,则无需导入。
至于在ClassA
方法中包装ClassB
方法,不,否。您可以随时在ClassA
内访问ClassB
静态方法;
ClassA.myMethodInClassA();
如果myMethodInClassA();
不是静态的,那么您需要在ClassA
的实例上调用它,所以,(仍然在ClassB中)你会做的;
ClassA myA = new ClassA();
myA.myMethodInClassA();
这将我带到static
vs non static
字段。如果您的字段initialize
和test
被标记为static
,例如;
public static boolean initialize = false;
然后,始终在所有 ClassA
实例中具有相同的值,并且可以随时随地访问;
if(ClassA.initialize) {
//something
}
如果不标记为静态,那么再次(非常类似于非静态方法)您需要ClassA
的实例来查询像<; p>这样的字段
ClassA myA = new ClassA();
if(myA.initialize) {
//something
}
在这种情况下,ClassA
的每个实例都有自己的initialize
副本,因此initialize
的值取决于您查询的实例
<强> 2。每次我执行B类时,是否总是创建一个新的A类实例?
如果你在ClassA
的构造函数中调用ClassB
的构造函数,那么答案是肯定的,换句话说,如果你这样做;
public ClassB() {
//constructor for ClassB
ClassA c = new ClassA();
}
然后是的,您将在每次时创建新的ClassA
,以创建新的ClassB
。
第3。如果打开了A类并运行了B类,那么B类是否获得了A类中变量的当前值,或者它是否因为新的classA(null,null)而得到A类默认值?
如果通过'open'表示你运行java ClassA
然后在命令提示符下运行java ClassB
,那么你拥有的是两个独立的程序,两个并行运行的JVM实例。这两个程序彼此无关,除非您专门实现某些内容,否则无法以任何方式相互通信。
如果通过'open'表示构造,例如new ClassA();
,那么我们再次讨论类和实例成员。
我在问题1的回答中大肆宣传static
与non-static
字段和方法,其中涵盖了这一理由。总的来说,我建议你阅读一些文档,例如:
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
TLDR:请阅读此链接^^
答案 1 :(得分:1)
@Jkteater因为你不支持你的问题代码片段,但根据你的问题
Is this the correct way to do it ?
Ans:您可以通过两个方法在任何其他类中使用类A的方法,一个是我在类B中创建类A的对象(classA a = new classA(); A.getTestValue();),第二个是通过继承将A类扩展到B类(B类扩展A类)。
Is every time I execute class B, is it always creating a new instance of class A?
Ans:如果你不想创建一个新的A类实例,那么要么扩展B类中的A类,要么让你的方法在类A中保持静态。在静态情况下,你只能通过类名使用它(A.getTestValue( );)
If class A is opened and I run class B, does class B get the current
values of variables in class A, or does it get the class A defaults
because of new classA(null, null)
Ans:classA a = new classA(null,null);此类(null,null)是一个构造函数,用于初始化类A的非静态数据成员,不会产生任何差异,B类的当前值是什么,值u将通过此构造函数,这将初始化类A的非静态数据成员。
对于您的以下问题,请粘贴确切的代码,以便我能够给出确切的答案..
答案 2 :(得分:0)
将变量测试设为静态,因为您正在创建A的新实例,值不同
这是正确的方法吗?
那取决于详细的用例
每次执行B类时,是否总是创建A类的新实例?
是的,每次创建B的实例时,它都会创建一个新的实例
如果打开了A类并运行了B类,那么B类是否在A类中获取变量的当前值,或者由于新的classA(null,null)而得到A类的默认值?
由于您要创建新实例,因此您将获得默认值