ホームページ >Java >&#&チュートリアル >Java 関数アクセス修飾子と匿名内部クラスの関係
Java 関数のアクセス修飾子は、パブリック、プロテクト、デフォルト、プライベートなど、関数の可視性の範囲を決定します。匿名内部クラスは外部クラス内のクラスとして、外部クラスのすべての非プライベート メンバーにアクセスできるため、その関数のアクセス権は外部クラスの関数のアクセス権に関連します。
Java関数のアクセス修飾子と匿名内部クラスの関係
Java関数のアクセス修飾子は、関数にアクセスできる場所を決定します。これらの修飾子には以下が含まれます:
匿名内部クラスとは、名前を指定せずにクラス内で定義されるJavaのクラスです。これらは通常、イベント ハンドラーやコンパレーターの実装など、使い捨てオブジェクトを作成するために使用されます。
匿名の内部クラスは、外部クラスのすべての非プライベート メンバーにアクセスできます。したがって、匿名内部クラスの関数のアクセス権は、その外部クラスの関数のアクセス権に関連します。例:
public class OuterClass { private int privateField = 1; protected int protectedField = 2; int defaultField = 3; public int publicField = 4; public void someMethod() { new Runnable() { @Override public void run() { // 内部类可以访问所有非私有成员变量 System.out.println(protectedField); System.out.println(defaultField); System.out.println(publicField); } }.run(); } }
上記のコードでは、匿名内部クラスの関数は、protectedField
、defaultField
、および publicField
にアクセスできません。のプライベート。 protectedField
、defaultField
和 publicField
,因为它们不是私有的。
实战案例:
假设我们有一个 EventProcessor
接口,它定义了一个 process()
方法。我们想创建一个匿名内部类来实现 process()
方法,该方法可以访问外部类中的数据。
public class Main { private String data = "Hello"; public static void main(String[] args) { EventProcessor processor = new EventProcessor() { @Override public void process() { // 匿名内部类可以访问外部类中的 data 成员变量 System.out.println(data); } }; processor.process(); } }
在这种情况下,只要 data
process()
メソッドを定義する EventProcessor
インターフェイスがあるとします。 process()
メソッドを実装する匿名の内部クラスを作成して、外部クラスのデータにアクセスできるようにしたいと考えています。 🎜rrreee🎜 この場合、 data
メンバー変数がプライベートでない限り、匿名内部クラスの関数は同じパッケージまたはサブパッケージからそれにアクセスできます。 🎜以上がJava 関数アクセス修飾子と匿名内部クラスの関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。