Java修飾子の分析

巴扎黑
リリース: 2016-11-26 09:14:07
オリジナル
1708 人が閲覧しました

視聴者の皆様、今日は Java のアクセス修飾子に関する関連問題について説明します。これはインタビューでもよく聞かれる質問です。
簡単に言えば、アクセス修飾子は、コードにアクセスできるときとコードにアクセスできないときを区別するために、コード作成者によって作成されます。 Java のアクセス制限は、フレンドリー (いわゆるデフォルト タイプ)、パブリック、プライベート、プロテクトの 4 つのカテゴリに分類されます。
今日は、区別するのがより難しい 2 つのカテゴリ、つまりフレンドリーと保護について見ていきます。
まずフレンドリーについて見てみましょう。メンバーの前に修飾子を追加しない場合、そのメンバーのアクセス レベルは、現時点では、そのクラスと同じパッケージ内の他のクラスはこれらのメンバーにアクセスできますが、異なるパッケージ クラス内の他のクラスはアクセスできません。これらのメンバーは次のようになります:

Java code

package com.a1;

/**

* A はパッケージ com.a1 に属します

* @author Will

*

*/

public class A {

//メンバーはすべてデフォルトのアクセスレベル

int i ;

String str;

void print(){

}

}

Java コード


package com.a1;

/**

* testA1 は com.a1 に属します

* @author Will

*

*/

public class testA1 {

public static void main(String[] args) {

//testA1 と A は同じパッケージに属しているため、フレンドリーなメンバーにアクセスできます

a a = new a ();

System.out.println (a.str);

}

}

Java コード

package com.b1;


import com.a1.A;

/**

* testA2 は com.b1 に属します

*

* @author Will

*

*/

public class testA2 {

パブリック静的ボイドMain (String [] ARGS) {

// testa2 は A と同じパッケージに属していないため、フレンドリーなメンバーにアクセスできません

// コメントを削除するとエラーが報告されます );パッケージが指定されていない場合、異なるフォルダー内のクラス ファイルが相互にフレンドリーなメンバーを呼び出すことができるという状況が発生します。これは、パッケージが指定されていない場合、すべてのファイルがデフォルトでデフォルトのパッケージに属するためです。メンバー同士を呼び合うことができます。

次に、保護された型を見てみましょう。この型はフレンドリー (つまりデフォルト) 型と非常に似ていますが、唯一の違いは継承です。簡単に言うと、クラス ファイルが同じパッケージ (継承を含む) に属していない限り、他のクラス ファイルは友好的なメンバーにアクセスできませんが、クラスが継承する場合は、同じパッケージに属しているかどうかに関係なく、継承の場合、サブクラスは親クラスの保護されたメンバーにアクセスできます。

Java コード

package com.a1;

/**

* A はパッケージ com.a1 に属します

* i、str はフレンドリー型です

* j、str1 は保護型です

* @author Will

*

*/

String str;

protected String str1;

Public A(){

}

void print(){

System.out.println("i:"+i+";str:"+str)

}

protected void print( int k){

print(int k)

package com.a1

/**

* testA1 は com.a1 に属します

* @author Will

*


*/

public class testA1 {

public static void main(String[] args) {

メンバー可以// ProteCted 型のメンバーにもアクセスできます

a a a = new a ();

system.out.println(a.j); System.out.println(a.str1);

Java コード

package com.b1;

import org.junit.Test

public void test()延長します延長します= New Extendsa ();

// パッケージと継承がなくなると、親に優しいメンバーを呼び出すことができなくなります

// .println (extendsA.i); 継承の場合、Callable の親クラスは protected になります。メンバー

System.out.println(extendsA.j);

extendsA.print(1) }

;

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート