我不知道我的代码有什么问题。我想在我的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();
}
}
答案 0 :(得分:0)
制作main()
方法的第4行beta_ku.info();
。您对.info
的其他来电无法正常工作,因为您尚未拨打isiB
并且他们默认为0。
答案 1 :(得分:0)
每次编写新Beta3时,都会创建一个Beta3类型的新对象,并带有一对新属性。如果你想要在前一个对象中设置的属性值,只需将该对象的引用传递给方法并从中获取值。
答案 2 :(得分:0)
那是因为你要求Beta3
的实例的值,它永远不会初始化它的值,Java会自动将int初始化为0(由于某种原因)
beta_ku
应正确打印10,但varobjBeta
未设置其b
值。
答案 3 :(得分:0)
Beta3
对info
的调用中Alpha
的实例未设置b
值。因此,它在实例化时初始化为0
。
这种情况发生的真正原因是由于initial values的建立方式,根据JLS:
每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化。 ...
...通常,这意味着所有基元都被初始化为某种形式的零,并且所有对象都被初始化为null
。
你怎么能绕过这个?您可以手动创建Beta3
的实例并将其传递给Alpha
的实例,或者只使用Beta3
打印自己的info
。
如果您致电beta_ku
,请注意info
可以正常工作 - 对于该实例,b
已定义为10
。
答案 4 :(得分:0)
在你写的信息方法中,这将永远不会奏效:
Beta3 betaku;
betaku = new Beta3();
System.out.println("b = " + betaku.perolehB());
并且将永远显示0(因为b未在betaku实例中初始化,因此默认值为0),您应该删除该行,并以某种方式传递b
值,或覆盖info方法在Beta3
班。
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();
}
}
然后在main中你可以做这样的事情:
public static void main(String[] args)
{
Beta3 varobjBeta;
varobjBeta = new Beta3();
varobjBeta.isiB(10);
Alpha varobjAlpha;
varobjAlpha = new Alpha();
varobjAlpha.info(varobjBeta);
}
答案 5 :(得分:0)
betake = new Beta3();
当您实例化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());
希望它有所帮助。