私はJAVAプログラミングの初心者です。私はゲームを作成している私のコースプロジェクトに取り組んでいます。このゲーム用に2つのクラスを作成しましたが、それらは同じパッケージに含まれています。クラスBでは、クラスAからメソッドを呼び出し、フィールドにもアクセスする必要があります。クラスAで定義されているメソッドにアクセスするためのコードはどのようにすべきですか?私はオンラインで解決策を検索し、誰かが次のようなコードを書くことを提案しました:
Classname.methodname(args)
ただし、コンパイルエラーがあります(私は思います)
error: cannot find symbol public A newA; symbol: class A location: class B
私が書いたコードは次のようなものです:
newA.moveRight(A.getANumber());
レッスンから学んだメソッドの1つは、クラスを拡張してメソッドにアクセスすることです。しかし、それらは2つの異なるクラスであるため、クラスを拡張することはできません。
誰かが私が犯した間違いの理由やこの問題の解決策を教えてもらえますか?助けてくれてありがとう。
この問題を解決するには、2つの方法があります。1つはメソッドを静的にすることで、もう1つは他のクラスのインスタンスを作成することです。
あなたがクラスをしなければならないとしましょう、ClassA
そしてClassB
ClassA
ClassA
には静的メソッドとパブリック初期化子がないため、メソッドを呼び出す唯一の方法ClassA
は、そのインスタンスを作成することです。
public class ClassA{
public ClassA(){
//Intentionally blank
}
public void doSomething(int anInt){
//Intentionally blank
}
public int doSomethingElse(){
return -1;
}
}
ClassB
ClassB
にはプライベート初期化子と静的メソッドがあるため、インスタンス化できず、クラスのインスタンスがなくてもそのメソッドを呼び出すことができます。
public class ClassB{
private ClassB(){
//Intentionally blank
}
public static void doSomething(int anInt){
//Intentionally blank
}
public static int doSomethingElse(){
return -1;
}
}
ここで、次のコードがあるとします。
public class ClassMain{
public static void main(String... args){
ClassB classB = new ClassB();//Will throw an error
ClassA classA = new ClassA();//Will compile fine
ClassB.doSomething(ClassB.doSomethingElse());//Will compile fine
classB.doSomething(classB.doSomethingElse());//Will give a warning
ClassA.doSomething(ClassA.doSomethingElse());//Will throw an error
classA.doSomething(classA.doSomethingElse());//Will compile fine
}
}
からメソッドを呼び出すには、そのメソッドを呼び出すためにClassA
instance(ClassA classA = new ClassA();
)を定義する必要があります。これは、メソッドがクラスメソッドではないためです。
からメソッドを呼び出すにClassB
は、クラス名(ClassB.doSomethingElse();
)を使用してメソッドにアクセスするだけです。これを使用できる理由ClassB
は、そのメソッドがstatic
クラスメンバーであり、そのためであるためです。
概要
メソッドをクラス名で呼び出すには、メソッドが静的である必要があります。静的でない場合は、クラスのインスタンスが必要になります。
これは、クラスのインスタンス化に関するオラクルのチュートリアルです。これは、クラスメンバーに関するオラクルのチュートリアルです。
継承や静的メンバーなどを完全に理解するために、それらを一読することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加