Java修飾子の分析

巴扎黑
巴扎黑オリジナル
2016-12-02 10:07:141080ブラウズ

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

package com.a1;
/**
 * A属于 com.a1 这个包
 * @author Will
 *
 */
public class A {
    //成员均为默认访问级别
int i;
String str;
void print(){
System.out.println("i:"+i+";str:"+str);
}
}
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.i);
System.out.println(a.str);
a.print();
}
}
package com.b1;
import com.a1.A;
/**
 * testA2属于com.b1
 * 
 * @author Will
 * 
 */
public class testA2 {
public static void main(String[] args) {
// 由于testA2与A不属于同一个包下,所以不能访问友好型的成员
// 去掉注释符会报错
A a = new A();
//System.out.println(a.i);
//System.out.println(a.str);
//a.print();
}
}

もちろん、読者は状況に遭遇するかもしれません。つまり、パッケージが指定されていない場合、異なるフォルダー内のクラス ファイルが相互にフレンドリーなメンバーを呼び出すことができます。その理由は次のとおりです。パッケージが指定されていない場合。 、すべてのファイルはデフォルトでデフォルト パッケージに属しているため、フレンドリーなメンバーを互いに呼び出すことができます。

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

れぇぇぇぇぇぇぇぇ


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。