Javaの同じパッケージの別のクラスにあるメソッドを呼び出す方法は?私が知っていることは、オブジェクトを使用して、異なるクラスからメソッドを呼び出すことができるということです。異なるクラスのメソッドを呼び出す他の方法はありますか?
クラスBのインスタンスを作成します。
B b=new B();
b.method();
または、クラスBで静的メソッドを定義します。
class B
{
static void staticMethod();
}
次のように呼び出します:
B.staticMethod();
メソッドは、オブジェクトメソッドまたはクラスメソッドです。
オブジェクトメソッド:オブジェクトに適用されます。インスタンスを使用する必要があります。
_instance.method(args...);
_
クラスメソッド:クラスに適用されます。暗黙的なインスタンスはありません。クラス自体を使用する必要があります。手続き型プログラミングに似ています。
_ClassWithStaticMethod.method(args...);
_
反射
リフレクションを使用すると、オブジェクトメソッドまたはクラスメソッドであるメソッドにプログラムでアクセスするためのAPIを使用できます。
インスタンスメソッド:methodRef.invoke(instance, args...);
クラスメソッド:methodRef.invoke(null, args...);
メソッドを静的として定義した場合、最初にクラスをインスタンス化せずに使用できますが、使用可能なオブジェクト変数もありません。
_public class Foo {
public static String Bar() {
return "bla";
}
}
_
その場合、Foo.Bar()
で呼び出すことができます。
フレッド・スワルツのノート(フレドサウルス)から:
メソッドには2つのタイプがあります。
インスタンスメソッドはオブジェクトに関連付けられ、そのオブジェクトのインスタンス変数を使用します。これがデフォルトです。
静的メソッド定義されているクラスのオブジェクトのインスタンス変数を使用しません。メソッドを静的に定義すると、インスタンスにアクセスしようとするとコンパイラから失礼なメッセージが表示されます変数。静的変数にアクセスできますが、定数を除き、これは異常です。静的メソッドは通常、パラメータからすべてのデータを取得し、変数への参照なしでそれらのパラメータから何かを計算します。これは、ある種の一般的な計算を行う典型的な方法です。これの良い例は、事前定義されたMath
クラスの多くのユーティリティメソッドです。
定義クラスの外部から、オブジェクトをプレフィックスとしてインスタンスメソッドを呼び出すことで、インスタンスメソッドに暗黙的なパラメータとして渡されます。たとえば、inputTF.setText("");
静的メソッドは、Math.max(i,j);
などのクラス名を接頭辞として呼び出すことで呼び出されます。不思議なことに、オブジェクトで修飾することもできますが、オブジェクトは無視されますが、オブジェクトのクラスが使用されます。
典型的な静的メソッドは次のとおりです。
_class MyUtils {
. . .
//================================================= mean
public static double mean(int[] p) {
int sum = 0; // sum of all the elements
for (int i=0; i<p.length; i++) {
sum += p[i];
}
return ((double)sum) / p.length;
}//endmethod mean
. . .
}
_
このメソッドが使用または変更するデータは、パラメータ(またはもちろんローカル変数)からのみです。
static
上記のmean()
メソッドは、同じクラス内から呼び出される限り、静的に宣言されていなくても機能します。クラスの外部から呼び出され、静的宣言されていなかった場合、オブジェクトで(無用に)修飾する必要があります。クラス内で使用する場合でも、メソッドを可能な場合は静的として定義するのには十分な理由があります。
2つのケースがあります。
同じクラス内から呼び出されます
静的メソッド名を書くだけです。例えば:
_// Called from inside the MyUtils class
double avgAtt = mean(attendance);
_
クラスの外部から呼び出される
メソッド(静的またはインスタンス)が別のクラスから呼び出される場合、メソッドが定義されているクラスを指定するには、メソッド名の前に何かを指定する必要があります。インスタンスメソッドの場合、これはメソッドがアクセスするオブジェクトです。静的メソッドの場合、クラス名を指定する必要があります。例えば:
_// Called from outside the MyUtils class.
double avgAtt = MyUtils.mean(attendance);
_
オブジェクトがその前に指定されている場合、オブジェクト値は無視され、オブジェクトのクラスが使用されます。
また、static
メソッドはインスタンス変数にアクセスできません。static
変数にアクセスできます。静的変数の一般的な使用法は、「定数」を定義することです。 Javaライブラリからの例は_Math.PI
_または_Color.RED
_です。これらはクラス名で修飾されているため、static
であることがわかります。 static
であるかどうかに関係なく、static
変数にアクセスできます。インスタンス変数には、インスタンスメソッドによってのみアクセスできます。
少しおかしくて、お勧めしませんが、静的メソッドにアクセスするために、クラス名の代わりにクラスのオブジェクトを使用できることがあります。これは、オブジェクト内のいくつかのインスタンス変数が使用されているという印象を与えるため、悪いですが、そうではありません。
静的メソッドの場合は、オブジェクトの代わりにクラス名を使用して呼び出すことができます。
静的メソッドを作成するか、コンストラクターで関数を呼び出すクラスのメンバーとして他のクラスを使用できます。
public class aClass {
private SomeOtherClass oc;
public class aClass( SomeOtherClass otherClass) {
oc = otherClass;
}
public callOtherClassMethod() {
oc.otherClassMethod();
}
}
次の形式で実行します。
classmehodisin.methodname();
例えば:
MyClass1.clearscreen();
注:メソッドは静的である必要があります。