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());