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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值