关于java访问修饰符的几个测试(jdk1.8)

变量和方法的访问修饰符有:public、protected、default(无修饰符)、private,先贴一下比较公认的访问权限。
访问权限     类   包  子类  其他包
public          ∨   ∨   ∨     ∨
protected    ∨   ∨   ∨     ×
default         ∨   ∨   ×      ×
private         ∨    ×    ×      ×

下面是自己的测试,注释的语句均为编译不通过,变量和方法带1的为public修饰,带2为protected修饰,3为default,4为private

package test1;

public class Jiekou{
	public String s1="A";
	protected String s2="B";
	String s3="C";
	private String s4="D";
	public static void main(String [] args){
	//说明四种访问修饰符都能被本类访问
		new Jiekou().method1();
		new Jiekou().method2();
		new Jiekou().method3();
		new Jiekou().method4();
		System.out.println(new Jiekou().s1);
		System.out.println(new Jiekou().s2);
		System.out.println(new Jiekou().s3);
		System.out.println(new Jiekou().s4);
	}
	public void method1(){
		System.out.println("a");
	}
	protected void method2(){
		System.out.println("b");
	}
	void method3(){
		System.out.println("c");
	}
	private void method4(){
		System.out.println("d");
	}
}
//Jiekou2类继承Jiekou类
class Jiekou2 extends Jiekou{
	public void method5(){
	//说明protected和default可以被子类访问,private则不可以
		new Jiekou2().method1();
		new Jiekou2().method2();
		new Jiekou2().method3();//既可以用子类对象也可以用父类对象调用父类default方法
		new Jiekou().method3();
		//new Jiekou2().method4();
		System.out.println(new Jiekou().s1);
		System.out.println(new Jiekou().s2);
		System.out.println(new Jiekou().s3);//可以访问父类的default变量
		System.out.println(new Jiekou2().s3);
		//System.out.println(new Jiekou().s4);
	}
}
class Jiekou3{
	public void method5(){
	//即使没有继承关系,只要在同一个包中,也可以访问其他类的protected和default变量和方法
		new Jiekou().method1();
		new Jiekou().method2();
		new Jiekou().method3();
		//new Jiekou().method4();
		System.out.println(new Jiekou().s1);
		System.out.println(new Jiekou().s2);
		System.out.println(new Jiekou().s3);
		//System.out.println(new Jiekou().s4);
		
	}
}
package youDao;
//不同包
import test1.Jiekou;

public class Jiekou4 extends Jiekou{
	public static void main(String[] args){
		new Jiekou().method1();
		new Jiekou4().method2();//可以通过继承,用子类对象调用不同包的父类protected方法
	      //new Jiekou4().method3();子类对象不能调用不同包的父类default方法
		//new Jiekou().method2();不同包,子类中不能通过父类对象调用父类的protected、default、private方法和变量
		//new Jiekou().method3();
		//new Jiekou().method4();
		System.out.println(new Jiekou().s1);
		//System.out.println(new Jiekou().s2);
		//System.out.println(new Jiekou().s3);
		//System.out.println(new Jiekou().s4);
	}
}
class Jiekou5{
	public void method1(){
	//无继承关系,只能访问public
		new Jiekou().method1();
		//new Jiekou().method2();
		//new Jiekou().method3();
		//new Jiekou().method4();
		System.out.println(new Jiekou().s1);
		//System.out.println(new Jiekou().s2);
		//System.out.println(new Jiekou().s3);
		//System.out.println(new Jiekou().s4);
	}
}

所以,同包中,protected和default都可被子类或其他类访问,不同包中,default修饰的变量和方法无法被子类访问,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值