1

「静的メソッドは他の静的メソッドのみを呼び出すことができ、そこから非静的メソッドを呼び出すことはできません」というドキュメントを読みました。しかし、私がそれをテストしようとしたとき、私は何か違うものを見たと思います.

以下に説明するクラスCがあります

import pckage1.*;

public class C
{

public static void main(String par[])
{       
}
public static void cc() 
{
    A ob = new A();
    ob.accessA(0);      
}   

}

クラスAはどこですか

package pckage1;

public class A 
{
public A() 
{
}
public void accessA(int x)
{   
}

}

ここで、クラス C の cc STATIC メソッドから、NON STATIC メソッド accessA() が呼び出されます。静的メソッドに関するステートメントが真である場合、どのようにそれが可能でしょうか?

4

6 に答える 6

5

静的メソッドは他の静的メソッドのみを呼び出すことができ、そこから非静的メソッドを呼び出すことはできません

それは間違っています。

静的メソッドは、メソッド呼び出すオブジェクトがある限り、非静的メソッドを呼び出すことができます(コードスニペットで発見したように)。非静的メソッドが他にどのように呼び出されるでしょうか

静的メソッドとして解釈され、静的メソッドで使用できるものがないため、静的メソッドから実行することはできません。nonStaticFoo()this.nonStaticFoo()this

今日の初めからの非常によく似た質問:

于 2012-05-09T13:19:12.797 に答える
2

クラスの非静的メソッドを呼び出さなかった。

これで試してください:

import pckage1.*;

public class C
{

public static void main(String par[])
{       
}
public static void cc() 
{
    A ob = new A();
    ob.accessA(0);  
    print();    
}   

public void print() 
{

}   
}

静的メソッドから非静的メソッドを呼び出しており、静的メソッドで使用するCクラスのインスタンスがないため、機能しません。

于 2012-05-09T13:20:13.123 に答える
2

すべてのJavaプログラムは静的メソッドから実行を開始するため、引用したステートメントが真である場合、Javaプログラムがインスタンスメソッドを実行する方法はありませんでした。

于 2012-05-09T13:20:47.200 に答える
2

静的メソッドには、C では既定のコンテキストがありませんthis

ただし、どのメソッドでも、クラスの intsnace を使用してメソッドを呼び出すことができます。

于 2012-05-09T13:21:23.287 に答える
1

インスタンスでインスタンスメソッドを呼び出しています。インスタンスメソッドを直接呼び出そうとしているのではありません。

于 2012-05-09T13:19:35.277 に答える
0

クラスAのインスタンスを作成し、そのインスタンスでメソッドを呼び出します。したがって、呼び出しているメソッドはインスタンスメソッドです(静的メソッドではありません)。ただし、クラスCの非静的メソッドを呼び出すことはできません。

于 2012-05-09T13:19:39.707 に答える