0

私が投稿している質問では、メソッドにアクセスするために、クラスの配列型のsetused()名前のオブジェクトを作成することを知りたいです。しかし、クラス beta から同じメソッドにアクセスしたい場合は、別のオブジェクトを作成する必要があります。しかし、同じオブジェクトを使用できるようにする方法はありますか? メソッドにアクセスするための配列型のobj1alphaobj1setused()

import javax.swing.JOptionPane;
public class first()
{
      public void main(String args[])
     {
         alpha[] obj1=new alpha[5];
         for(int i-0;i<5;i++)
         obj1[i].setused(int 1);
     }
}

class alpha
{
   private int un_used=5;
   private int used=0

   public int getun_used()
   {
          return un_used;
   }

   public int getused()
   {
          return used; 
   }

   public void setused(int use)
   {
          used= use;
   }
}

class beta
{
    private String name;
}
4

4 に答える 4

3

まずNullPointerException、特定のサイズのオブジェクトの配列を作成しても、その数のオブジェクトを作成しているとは限らないため、コードがスローされます。配列はnullsのみを保持します。

次に、クラスalphabetaクラスはメソッドを共有しません。にメソッドはありませsetused()beta。今から私はあると仮定しています:

class beta
{
    private String name;

    public void setused(int use) { //...
    }

}

を使用することです。

interface Used {

    void setused(int use);

}

abstract基本クラスも行います。次に、そのインターフェイスを実装します。

class alpha implements Used { //...
class beta implements Used { //...

Used次に、次のタイプの配列を作成します。

 Used[] obj1=new Used[5];
 obj1[0] = new alpha();
 obj1[1] = new beta();
 //...
 for(int i-0;i<5;i++)
 obj1[i].setused(1);

最後に、 Javaの命名規則について読んでください。

于 2012-06-03T13:31:42.683 に答える
2

アクセスしたいメソッドで static 修飾子を使用したいと思うでしょう。これは、他のクラスでは ClassName.methodname(parameters) を使用してメソッドにアクセスできることを意味します。たとえば、setused を静的メソッドにしたい場合は、最初に alpha.setUsed でアクセスします。

public static void setUsed(int use) {
    used=use;
}

public class first {

    public void main(String args[]) {
        alpha.setUsed();
    }
}

静的およびその他のテーマについて詳しく知りたい場合は、Java チュートリアル ( http://docs.oracle.com/javase/tutorial/ ) にアクセスしてください。

また、1 つではなく 5 つのオブジェクトを初期化しています。クラス alpha を配列のように動作させるには、alpha によって Array を拡張する必要があります。

public alpha extends Array {}

これにより、クラスは継承を介して Array のすべてのメソッドを使用できるようになります。継承の別の言葉はポリモーフィズムであり、上記で言及されていることに注意してください。

また、配列内のオブジェクトは、初期化したのでインスタンス化する必要があります。

public void main(String args[]) {

    alpha[] obj1=new alpha[5];
    for(int i-0;i<5;i++) {
        obj[i] = new alpha();
        obj1[i].setused(1);
    }
 }

オブジェクトは初期化 (メモリー空間を指定) してから、インスタンス化 (メモリー空間を実際のオブジェクトで満たす) する必要があります。

通常、オブジェクトがどのように呼び出されるかに注意してください。

alpha a = new alpha();

これは 1 行での初期化とインスタンス化です。ここでは 2 行で示しています。

alpha a;
a = new alpha();

最初の行は a にメモリを割り当て、2 番目の行は実際に a を作成してそのメモリに配置し、すぐに使用できるようにします。

オブジェクトの配列を初期化しただけなので、それらを使用しようとすると NullPointerException が発生します。

これが役に立ったことを願っています。

于 2012-06-03T13:53:05.050 に答える
0
You have to pass the reference of obj1 to the class beta like:
class beta
{
   alpha a;
   beta(alpha a)
   {
     this.a = a;
   }


}
于 2012-06-03T13:31:53.017 に答える
0
  class beta{
private String name;
private alpha[] alphaArray ;

public void setAlpha(alpha[] alphaArray){
  this.aplhoaArray = alphaArray.clone();
}

public void someMethod(){
  // access alpha[index].setUsed() method here 
}

}

あなたの問題を正しく理解しているかどうかはわかりませんが、このコードが役立つかもしれません。

于 2012-06-03T13:33:14.350 に答える