java中四種訪問修飾符


Java中的四種訪問修飾符:public、protected、default(無修飾符,默認)、private。

 

  • 四種修飾符可修飾的成分(類、方法、成員變量)
  public protected default private

×

×(內部類可以用private修飾)
方法

成員變量

 

  • 四種修飾符的訪問權限

public:對所有類可見

protected:對同一包中的類可見、對同一包及不同包中的子類可見

default:對同一包中的類可見、對同一包中的子類可見

private:僅對類本身可見   

可見是可訪問的意思,即由這些修飾符修飾的成分(類、方法、成員變量)可以被其它類訪問。對子類可見即子類可以繼承。

這里需要注意的是protected與default,二者的區別在於不同包中的子類是否可以繼承。

訪問權限 同一包 同一包中的子類 不同包中的子類 不同包
public

protected

×
default

× ×
private

× × × ×

 

  • 例如

package1:ParentClass、ChildClassOne、TestOne

package2:ChildClassTwo、TestTwo

package3:TestThree

其中ParentClass為

public class ParentClass {

	public int a=2;
	protected int b = 3;
	int c = 4;
	private int d = 5;

}

  1.對於TestOne來說,ParentClass類、a、b、c均可見,d不可見。即在TestOne中可以new一個ParentClass對象,且該對象中的a,b,c變量可操作。如下:

 

public class TestOne {

	public static void main(String args[]) {

		ParentClass obj = new ParentClass();

		System.out.println(obj.a);
		System.out.println(obj.b);
		System.out.println(obj.c);
//		System.out.println(obj.d);     //d 不可見
	}
}

  2. ChildClassOne繼承ParentClass且與其在同一個包中,則a、b、c均可見,d不可見。

public class ChildClassOne extends ParentClass{

	public static void main(String args[]) {

		ChildClassOne obj = new ChildClassOne();

		System.out.println(obj.a);
		System.out.println(obj.b);
		System.out.println(obj.c);
//		System.out.println(obj.d);      // d不可見
	}
}

  3ChildClassTwo繼承ParentClass,則a、b均可見,d不可見,由於子類與ParentClass不在同一包中,故c(default類型)不可見。

public class ChildClassTwo extends ParentClass{

	public static void main(String args[]) {
		ChildClassTwo obj = new ChildClassTwo();

		System.out.println(obj.a);
		System.out.println(obj.b);
//		System.out.println(obj.c);    // c不可見
//		System.out.println(obj.d);    // d不可見
	}
}

 4.對於TestTwo來說,ParentClass類、a均可見,b、c、d不可見。由於TestTwo與ParentClass不在同一個包中,故只有public修飾的成分可見。

public class TestTwo {

	public static void main(String args[]) {

		ParentClass obj = new ParentClass();
		System.out.println(obj.a);
//		System.out.println(obj.b);     // b 不可見
//		System.out.println(obj.c);     // c 不可見
//		System.out.println(obj.d);     // d 不可見
	}
}

 

  • 另外值得注意的是繼承父類的子類與其他類之間的可見性,取決於其他類與父類之間的可見性。

對於TestOne來說,ChildClassOne中a,b,c都可見,d不可見,這是由於TestOne與ParentClass在同一個包中。

而對於TestThree來說,ChildClassOne中只有a可見,這是由於TestThree與ParentClass在不同的包中。

需要注意:

雖然a、b對ChildClassTwo可見,TestTwo與ChildClassTwo在同一包中,

但對於TestTwo來說,ChildClassTwo中只有a可見,這是由於TestTwo與ParentClass在不同的包中,只有public修飾的可見。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM