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
}
}