JAvaのパッケージへのアクセス

3209 ワード

Javaにはpublic、protected、privateの3つの修飾子があります.実際にはデフォルトのパッケージも隠されています.
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に開けたとは思わなかった.