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類");
}
}*/
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
}
}