JAvaのパッケージへのアクセス
3209 ワード
Javaにはpublic、protected、privateの3つの修飾子があります.実際にはデフォルトのパッケージも隠されています.
public:タイプの主な機能を定義します.
protected:サブクラスで得られる特化目的のための機能を定義します.
private:このような特定の機能のみを定義します.
package(デフォルト):パッケージ内の他のコードで入手可能なパッケージタイプ間のコラボレーションを実現するための機能を定義します.
例:
4つのクラス、3つのパケット、AbstractBaseおよびConcrete 2はパケットP 1にあり、Concrete 1はP 2にあり、Concrete 3はP 3にある.
実行結果:
と書く
Create Object : class P2.Concrete1
AbstractBase.pri()
AbstractBase.pac()
Concrete1.pro()
Concrete1.pub()
Create Object : class P1.Concrete2
AbstractBase.pri()
Concrete2.pac()
Concrete2.pro()
Concrete2.pub()
Create Object : class P3.Concrete3
AbstractBase.pri()
Concrete3.pac()
Concrete3.pro()
Concrete3.pub()
結果分析:
1,すべてのサブクラスにprivateが表示されない場合、privateメソッドは常に上書きされません.
2,protectedもpublicも布団類でカバーできる.
3、デフォルトのpackageが一番面白かったのは、Concrete 1とAbstractBaseが同じパッケージでないと正常をカバーできないこと、Concrete 2とAbstractBaseが同じパッケージでカバーできるのも正常で、Concrete 3とAbstractBaseは同じパッケージではないのに、Concrete 2がpacの方法をカバーしているので、これをpublicに開けたとは思わなかった.
public:タイプの主な機能を定義します.
protected:サブクラスで得られる特化目的のための機能を定義します.
private:このような特定の機能のみを定義します.
package(デフォルト):パッケージ内の他のコードで入手可能なパッケージタイプ間のコラボレーションを実現するための機能を定義します.
例:
package P1;
public abstract class AbstractBase {
public AbstractBase() {
System.out.println("
Create Object : " + getClass());
}
private void pri() {System.out.println("AbstractBase.pri()");}
void pac() {System.out.println("AbstractBase.pac()");}
protected void pro() {System.out.println("AbstractBase.pro()");}
public void pub() {System.out.println("AbstractBase.pub()");}
public final void show() {
pri();
pac();
pro();
pub();
}
}
package P2;
import P1.AbstractBase;
public class Concrete1 extends AbstractBase {
public void pri() {System.out.println("Concrete1.pri()");}
public void pac() {System.out.println("Concrete1.pac()");}
public void pro() {System.out.println("Concrete1.pro()");}
public void pub() {System.out.println("Concrete1.pub()");}
}
package P1;
import P2.Concrete1;
public class Concrete2 extends Concrete1 {
public void pri() {System.out.println("Concrete2.pri()");}
public void pac() {System.out.println("Concrete2.pac()");}
public void pro() {System.out.println("Concrete2.pro()");}
public void pub() {System.out.println("Concrete2.pub()");}
}
package P3;
import P1.Concrete2;
import P2.Concrete1;
public class Concrete3 extends Concrete2 {
public void pri() {System.out.println("Concrete3.pri()");}
public void pac() {System.out.println("Concrete3.pac()");}
public void pro() {System.out.println("Concrete3.pro()");}
public void pub() {System.out.println("Concrete3.pub()");}
public static void main(String[] args) {
new Concrete1().show();
new Concrete2().show();
new Concrete3().show();
}
}
4つのクラス、3つのパケット、AbstractBaseおよびConcrete 2はパケットP 1にあり、Concrete 1はP 2にあり、Concrete 3はP 3にある.
実行結果:
と書く
Create Object : class P2.Concrete1
AbstractBase.pri()
AbstractBase.pac()
Concrete1.pro()
Concrete1.pub()
Create Object : class P1.Concrete2
AbstractBase.pri()
Concrete2.pac()
Concrete2.pro()
Concrete2.pub()
Create Object : class P3.Concrete3
AbstractBase.pri()
Concrete3.pac()
Concrete3.pro()
Concrete3.pub()
結果分析:
1,すべてのサブクラスにprivateが表示されない場合、privateメソッドは常に上書きされません.
2,protectedもpublicも布団類でカバーできる.
3、デフォルトのpackageが一番面白かったのは、Concrete 1とAbstractBaseが同じパッケージでないと正常をカバーできないこと、Concrete 2とAbstractBaseが同じパッケージでカバーできるのも正常で、Concrete 3とAbstractBaseは同じパッケージではないのに、Concrete 2がpacの方法をカバーしているので、これをpublicに開けたとは思わなかった.