Java中不同权限修饰符的区别(private protected public 默认修饰)

Java中不同权限修饰符的区别private、protected、public、默认(不加任何修饰符)

前言

 在Java类的方法定义时,可以添加四种修饰符,不同的修饰符所具有的权限范围是不一样的,本文就这些情况做出了具体的案例情况与分析。下面给出相关的分析过程。

  • private
    被private修饰的方法,只有在定义该类方法的类中才可调用该私有权限的方法,除此以外,其他任何地方都是没有权限去调用被private修饰的方法,同一个包下的其他类不同包中的其他类、还是子类(不论是同一个包下的还是不同包下的子类)都无法调用!!!只有它自己这个类可以调用。
  • protected
    被protected修饰的方法,子类(同一个包下的、不同包下的)可以调用、同一个包下的类也可以调用,但不能在不同包下的其他类中调用(无关类)。
  • public
    被public修饰的方法,限制最少,也是最简单的,它在任何时候都可以调用。
  • 默认
    不加权限修饰符的方法,在同一个包下的子类可以调用、同一个包下的其他类也可以调用,只有这两个地方可以调用,其他地方不可调用。

代码演示

1.创建两个包,以区分不同包的情况,分别命名为temp1和temp2
2.在第一个包下创建三个类,分别命名为Fu、Zi、MainTest,代表父类、同一个包下的子类、同一个包下的其他类
3.在第二个包下创建两个类,分别命名为Zi、MainTest,代表不同包下的子类、不同包下的其他类
4.添加相关代码,具体关系如下图所示,具体代码如下所示
在这里插入图片描述

temp1下的三个类

  1. Fu类
    Fu类中有默认权限、private权限、protected权限和public权限的四种不同权限方法,并且有一个main方法。我们在这个main方法下测试这几种情况(同一个包同一个类下这四种不同修饰权限方法的访问情况)。通过代码最后的输出结果可以得到,在同一个包下的同一个类里面,四种权限的方法都可以被访问(输出结果没有给出,大家可以复制代码到自己的电脑上敲一下试试输出结果)。
package temp1;
public class Fu {
	void show1() {
		System.out.println("void show1");
	}
	private void show2() {
		System.out.println("private void show2");
	}
	protected void show3() {
		System.out.println("protected void show3");
	}
	public void show4() {
		System.out.println("public void show4");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fu f1 = new Fu();
		f1.show1();
		f1.show2();
		f1.show3();
		f1.show4();
	}
//	同一个包且同类 都可访问到	
}
  1. Zi类
    Zi类继承了Fu类,Zi类主要进行测试同一个包下子类的访问权限,通过代码最后的输出结果可以得到,同一个包下的子类中,除了私有权限的方法,其他的都可以访问。
package temp1;
public class Zi extends Fu{
	public static void main(String[] args) {
		Zi z1 = new Zi();
		z1.show1();
		z1.show3();
		z1.show4();
	}
//	同一个包中的子类中 不可访问私有权限的方法
}

  1. MainTest类
    MainTest类主要测试的是同一个包下的非子类的访问权限。通过Fu类创建一个对象,然后访问Fu类的方法,通过结果可以看到,非子类与子类相同,都不能访问私有权限的方法。
package temp1;
public class MainTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fu f1 = new Fu();
		f1.show1();
		f1.show3();
		f1.show4();
	}
//	同一个包不同的非子类 不可访问私有权限的方法
}

temp2下的两个类
4. Zi类
temp2下的Zi类继承了temp1中的Fu类,在该类下我们通过调用发现,不可访问默认权限和私有权限的方法,即不同包下的子类不能访问private和默认权限的方法,这比同一个包下的子类访问少了一个访问范围,就是默认权限在不同包下的子类不能访问了。

package temp2;
import temp1;//Fu属于不同包中的类 需要导包才能使用
public class Zi extends Fu{
	public static void main(String[] args) {
		Zi z1 = new Zi();
		z1.show3();
		z1.show4();
	}
//	不同包的子类 不能访问默认权限和私有权限的
}

  1. MainTest类
    MainTest类测试的是不同包的非子类(无关类)访问情况,通过代码输出可以得到,不同包下的无关类访问权限最少,只能访问public修饰的方法。
package temp2;
import temp1.Fu;//Fu属于不同包中的类 需要导包才能使用
public class MainTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fu f1 = new Fu();
		f1.show4();
	}
//	不同包的无关类 只能访问public权限修饰的
}

结论

综上,我们可以得出两个个简短的口诀,其实不用记,写出来为了简化上面的长篇大论。
1.
同包同类都可访问;
同包不同类,私有不可访问;
不同包的子类不能访问私有和默认权限;
不同包无关类只能访问公共权限;

2.
公共权限都可访问
私有权限自己访问
保护权限无关不得访问
默认权限不同包不访问

或下面两个表所述

表1
在这里插入图片描述
表2
在这里插入图片描述
 上述表达可能有些拗口,还请多多理解并在代码中实践去深刻体会!

好了,关于这四种权限的访问就介绍到这里了,如果有疑问或者需要更正的地方请在评论区留言哦!感谢阅读,如果觉得文章对你有用的话不妨留下你的点赞吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值