Java 从另一个类访问私有变量?
我不知道我的代码出了什么问题。我想在我的Java 从另一个类访问私有变量?,java,Java,我不知道我的代码出了什么问题。我想在我的info()方法中显示b(10)的值,但是当我运行此代码时,b的值是0。为什么会发生这种情况 class Alpha { public int a = 5; public void info() { System.out.println("a = " + a); Beta3 betaku; betaku = new Beta3(); System.out.println("b
info()
方法中显示b(10)的值,但是当我运行此代码时,b的值是0。为什么会发生这种情况
class Alpha {
public int a = 5;
public void info() {
System.out.println("a = " + a);
Beta3 betaku;
betaku = new Beta3();
System.out.println("b = " + betaku.perolehB());
System.out.println("Dipanggil pada " + this.getClass().getName());
System.out.println("----------");
}
}
以下是主要课程:
class Beta3 extends Alpha {
private int b;
public void isiB(int b){
this.b=b;
}
public int perolehB(){
return b;
}
public static void main(String[] args) {
Beta3 varobjBeta;
varobjBeta = new Beta3();
varobjBeta.isiB(10);
varobjBeta.info();
Alpha varobjAlpha;
varobjAlpha = new Alpha();
varobjAlpha.info();
}
}
把你的
main()
方法,beta_ku.info()的第4行写出来代码>。您对.info
的其他调用不起作用,因为您没有调用isiB
,它们默认为0。每次编写新的Beta3时,都会创建一个Beta3类型的新对象,并带有一对新属性。如果您想要在前一个对象中设置的属性值,只需将该对象的引用传递给该方法并从中获取值。这是因为您要求的是Beta3
实例的值,该实例无论如何都不会初始化其值,Java会自动将ints初始化为0(出于某种原因)
beta_ku
应该正确打印出10,但是varobjBeta
没有设置它的b
值。在info
调用Alpha
中Beta3
的实例没有设置它的b
值。因此,它在实例化时初始化为0
发生这种情况的真正原因是根据JLS建立的方式:
每个类变量、实例变量或数组组件在创建时都会使用默认值初始化
…这通常意味着所有原语都初始化为某种形式的零,所有对象都初始化为null
你会怎么处理这件事?或者手动创建一个Beta3
的实例,并将其传递给Alpha
的实例,或者只使用Beta3
打印它自己的info
请注意,beta_ku
可以正常工作,如果您正在调用info
——例如,b
被定义为10
,,在您编写的info方法中,它永远不会工作:
Beta3 betaku;
betaku = new Beta3();
System.out.println("b = " + betaku.perolehB());
并且ever将显示0(因为b在betaku实例中未初始化,所以默认值为0),您应该删除该行,并以某种方式传递b
值,或者重写Beta3
类中的info方法
class Beta3 extends Alpha
{
//Another code
public void info()
{
// super.info(); if you wanna show the a value too
System.out.println("b=" + this.b);
}
//Some other code
}
或者,如果需要从Alpha类访问该值:
class Alpha
{
public void info(Beta3 aux)
{
this.info();
aux.info();
}
}
然后大体上你可以这样做:
public static void main(String[] args)
{
Beta3 varobjBeta;
varobjBeta = new Beta3();
varobjBeta.isiB(10);
Alpha varobjAlpha;
varobjAlpha = new Alpha();
varobjAlpha.info(varobjBeta);
}
当您实例化betake
时,它只是将默认值分配给类Beta3
的属性。这里类Beta3
的属性是b
下表按类型列出了类变量的默认值:
Type default
--------------------------------------------------------
boolean false
int 0
float 0.0
char /u0000
reference type null
所以在你的类中,Beta3
b
是int
,所以它得到了默认值0
。您需要调用isiB(int b)
将预期值设置为b
,或者您必须编写一个参数化con结构来设置b
的值
public Beta3(int bb){
this.b= bb;
}
编辑
Beta3 betaku;
betake = new Beta3();
betake.isiB(10);
System.out.println("b = " + betaku.perolehB());
希望有帮助。Thx所有回复,我在Beta3类中修复了一些代码,如上面所述,但我仍然不知道如何修复Alpha
class,,,在Alpha中,您正在显示betaku实例的b值,betaku实例尚未初始化该值,那么我必须做什么,才能显示b值?如果我删除那一行,它会显示错误,,,Thx供您解释,但如何在System.out.println(“b=“+betaku.perolehB())中获取b的值代码>字母class@AepSaepudin只需创建一个参数化con结构,如我所示。thx用于响应,但如何将b值传递给alpha类,传递值不是最佳选择,最好在Beta3类中实现info方法,并在那里打印b值,而不是在alpha的info方法中
Beta3 betaku;
betake = new Beta3();
betake.isiB(10);
System.out.println("b = " + betaku.perolehB());