Java訪問權限自測

AccessAuthority.java:

package cn.edu.xidian.w3ang.javabasic;
/**
 * 當private方法或自帶定義後卻沒有使用,又private類型的只能本類中訪問,所以會有提示如下():
 * The method privateMethod() from the type AccessAuthority is never used locally。
 * 但是其他訪問權限的字段、方法沒使用卻不提示,因爲他們在其他類中可能被訪問。
 * @author wwwang
 */
//public final class AccessAuthority //也OK,只是不能被繼承了
public class AccessAuthority
{
	public int publicNum;
	protected int protectedNum;
	int defaultNum;
	private int privateNum;
	public void publicMethod()
	{
		System.out.println("AccessAuthority.publicMethod()");
	}
	protected void protectedMethod()
	{
		System.out.println("AccessAuthority.protectedMethod()");
	}
	void defaultMethod()
	{
		System.out.println("AccessAuthority.defaultMethod()");
	}
	private void privateMethod()
	{
		System.out.println("AccessAuthority.privateMethod()");
	}
	/**
	 * 別擔心main內部new了自身,會陷入遞歸,因爲main方法是static的,只會執行一次;
	 * 本類中四種權限的字段、方法均可訪問。
	 * class的修飾符:public、默認空、public final、final、public abstract、abstract
	 * @param args
	 */
	public static void main(String[] args)
	{
		//別擔心main內部new了自身,會陷入遞歸,因爲main方法是static的,只會執行一次;
		AccessAuthority accessAuthority=new AccessAuthority();
		accessAuthority.setNums(1, 2, 3, 4);
		System.out.println(accessAuthority);
		accessAuthority.publicMethod();
		accessAuthority.protectedMethod();
		accessAuthority.defaultMethod();
		accessAuthority.privateMethod();
		DefaultClass.main(args);
		new DefaultClass().main(args);
		FinalClass.main(args);
		new FinalClass().main(args);
		AbstractClass.main(args);
		//抽象類不能直接用new創建實例對象
		//new AbstractClass();//Cannot instantiate the type AbstractClass
	}
/*  OutPut:	
    1, 2, 3, 4
	AccessAuthority.publicMethod()
	AccessAuthority.protectedMethod()
	AccessAuthority.defaultMethod()
	AccessAuthority.privateMethod()
	默認訪問權限的DefaultClass類
	默認訪問權限的DefaultClass類
	final修飾的類:FinalClass.main()
	final修飾的類:FinalClass.main()
	abstract修飾的類,注意抽象類不能直接創建對象*/
	public void setNums(int a,int b,int c,int d)
	{
		this.publicNum=a;
		protectedNum=b;
		defaultNum=c;
		privateNum=d;
	}
	
	@Override
	public String toString()
	{
		// TODO Auto-generated method stub
		return ""+publicNum+", "+protectedNum+", "+defaultNum+", "+privateNum;
	}
}

class DefaultClass
{
	public static void main(String[] args)
	{
		System.out.println("默認訪問權限的DefaultClass類");
	}
}

final class FinalClass
{
	public static void main(String[] args)
	{
		System.out.println("final修飾的類:FinalClass.main()");
	}
}

final class PublicFinalClass
{
	public static void main(String[] args)
	{
		System.out.println("final修飾的類:FinalClass.main()");
	}
}

abstract class AbstractClass
{
	public int Num;
	protected int Num2;
	private int Num3;
	public static void main(String[] args)
	{
		System.out.println("abstract修飾的類,注意抽象類不能直接創建對象");
	}
	
	public void  test()
	{
		System.out.println("抽象類可以有方法、字段等成員");
	}
}

//Illegal modifier for the class ProtectedClass; only public, abstract & final are permitted
/*protected class ProtectedClass
{
	public static void main(String[] args)
	{
		System.out.println("默認訪問權限的Test類");
	}
}*/


AccessAuthoritySamePackage.java:

package cn.edu.xidian.w3ang.javabasic;

public class AccessAuthoritySamePackage
{
	/**
	 * 同一個包中,B類可以訪問A類的public、protected、默認訪問權限的字段、方法;
	 * private類型的field、method則不可以訪問
	 * @param args
	 */
	public static void main(String[] args)
	{
		AccessAuthority aa=new AccessAuthority();
		aa.setNums(5, 6, 7, 8);
		System.out.println(aa.publicNum);
		System.out.println(aa.protectedNum);
		System.out.println(aa.defaultNum);
		//System.out.println(aa.privateNum);//The field AccessAuthority.privateNum is not visible
		aa.publicMethod();
		aa.protectedMethod();
		aa.defaultMethod();
		//aa.privateMethod();//The method privateMethod() from the type AccessAuthority is not visible
	}
}

AccessAuthoritySub.java:

package cn.edu.xidian.w3ang.javabasic;

public class AccessAuthoritySub extends AccessAuthority
{
	/**
	 * 同一個包中,B類可以訪問A類的public、protected、默認訪問權限的字段、方法;
	 * 所以同一個包中且B類繼承自A類,則B類當然可以訪問A類的public、protected、默認訪問權限的字段、方法
	 * private類型的field、method仍然不可以訪問
	 * @param args
	 */
	public static void main(String[] args)
	{
		AccessAuthority aa=new AccessAuthority();
		aa.setNums(5, 6, 7, 8);
		System.out.println(aa.publicNum);
		System.out.println(aa.protectedNum);
		System.out.println(aa.defaultNum);
		//System.out.println(aa.privateNum);//The field AccessAuthority.privateNum is not visible
		aa.publicMethod();
		aa.protectedMethod();
		aa.defaultMethod();
		//aa.privateMethod();//The method privateMethod() from the type AccessAuthority is not visible
	}
}

AccessAuthorityOtherPackage.java:

package cn.edu.xidian.w3ang.javabasicTest;

import cn.edu.xidian.w3ang.javabasic.AccessAuthority;

public class AccessAuthorityOtherPackage
{
	/**
	 * 不同包中,B類僅可以訪問A類的public字段、方法
	 * @param args
	 */
	public static void main(String[] args)
	{
		AccessAuthority aa=new AccessAuthority();
		aa.setNums(5, 6, 7, 8);
		System.out.println(aa.publicNum);
		//System.out.println(aa.protectedNum);//The field AccessAuthority.protectedNum is not visible
		//System.out.println(aa.defaultNum);//The field AccessAuthority.defaultNum is not visible
		//System.out.println(aa.privateNum);//The field AccessAuthority.privateNum is not visible
		aa.publicMethod();
		//aa.protectedMethod();//The method protectedMethod() from the type AccessAuthority is not visible
		//aa.defaultMethod();The method defaultMethod() from the type AccessAuthority is not visible
		//aa.privateMethod();//The method privateMethod() from the type AccessAuthority is not visible
	}
}

AccessAuthorityOtherPackageSub.java:

package cn.edu.xidian.w3ang.javabasicTest;

import cn.edu.xidian.w3ang.javabasic.AccessAuthority;

public class AccessAuthorityOtherPackageSub extends AccessAuthority
{
	/**
	 * 不同包中,B類僅可以訪問A類的public字段、方法
	 * 不同包中B類繼承自A類,同樣B類僅可以訪問A類的public字段、方法
	 * @param args
	 */
	public static void main(String[] args)
	{
		AccessAuthority aa=new AccessAuthority();
		aa.setNums(5, 6, 7, 8);
		System.out.println(aa.publicNum);
		
		//System.out.println(aa.protectedNum);//The field AccessAuthority.protectedNum is not visible
		//System.out.println(aa.defaultNum);//The field AccessAuthority.defaultNum is not visible
		//System.out.println(aa.privateNum);//The field AccessAuthority.privateNum is not visible
		aa.publicMethod();
		//aa.protectedMethod();//The method protectedMethod() from the type AccessAuthority is not visible
		//aa.defaultMethod();//The method defaultMethod() from the type AccessAuthority is not visible
		//aa.privateMethod();//The method privateMethod() from the type AccessAuthority is not visible
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章