Java访问控制符原理及具体用法解析

 更新时间:2020年11月02日 15:00:35   作者:爱写代码的基  
这篇文章主要介绍了Java访问控制符原理及具体用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Java包中的相关概念

包的概念

  Java中的包类似于操作系统中的文件夹,将具有类似功能的类或者相同的类放在相同的包里面,便于组织与管理

包的作用

  1.一是开发过程中避免类名重复问题;

  2.二是对代码整理归类,将功能相近的类放到一个包中管理;

  3.三是限定访问权限(default)就是包访问权限。

简述调用某个包中的类的三种方式

  1>使用一个类的全名:即包名+类名

    注意:在包中,所有类对真正名字将是包名+类名的组合,所以在运行的时候要将包层给写上,不能直接写类名。

  2>使用import语句导入一个包中的所有的类。

  3>使用import语句导入一个包中的特定的类。

Java中访问控制符的具体用法

为什么需要控制对成员的访问?

  第一个原因是防止程序员接触他们不该接触的东西---通常是内部数据类型的设计思想。

  进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。Java的访问控制级别分类

  1.类访问控制级别

  •  public
  •  default(默认的,什么都不用写,包内访问控制符)

  2.对象访问控制级别

  •  public:它修饰的成员没有限制,任何包中的任何类都能访问。
  •  protect:它修饰的只能被同一个包中的类访问,或者不同包中的子类访问。
  •  default:只能被同一个包中的类访问,包括同一个包中的子类。
  •  private:只能被同一个类中的方法访问。

访问权限

访问权限 同一个类内部 同一个包内部 不同包中的子类 不同包的非子类
public
protected ×
default × ×
private × × ×

  总结:

    1>在一个类的内部,访问控制符是透明的,失效的

    2>在同一个包的内部,只有private有成员不能进行访问

    3>在不同包存在继承关系的两个类之间,只有public成员和protected成员可以进行访问

    4>在不同包之间,只有共有成员可以进行访问

代码演示

  (1)在一个类的内部,所有的成员彼此之间都可以进行相互访问,访问控制符是透明的,失效的,共有的可以调用私有的,私有的可以调用共有的。

package com.vg.demo01;

public class TestAccessModifier {
	public void test1(){
		System.out.println("我是public");
	}
	protected void test2(){
		System.out.println("我是protected");
	}
	void test3(){
		System.out.println("我是default");
	}
	private void test4(){
		System.out.println("我是private");
	}
	public static void main(String[] args) {
		TestAccessModifier t=new TestAccessModifier();
		t.test1();
		t.test2();
		t.test3();
		t.test4();
}
}

我是public
我是protected
我是default
我是private

  (2)在同包不同类之间,只有其私有成员不可以通过类对象名的方式进行访问,共有成员和保护型的成员都可以通过这种方式进行访问. 简言之:在同一个包的内部,只有其私有成员不能够进行访问

package com.vg.demo01;
//private是不能在同包的子类中起作用的。
public class TestAccessModifierSon extends TestAccessModifier{
	
	public static void main(String[] args ) {
		TestAccessModifierSon s = new TestAccessModifierSon();
		s.test1();
		s.test2();
		s.test3();
	}
	
}

我是public
我是protected
我是default

package com.vg.demo01;
//非子类,在同一个包中,没有继承父类,即不是它的子类,private同样不能发挥作用
public class TestAccessModifierNotSon {
	
	public static void main(String[] args ) {
		TestAccessModifierSon s = new TestAccessModifierSon();
		s.test1();
		s.test2();
		s.test3();
	}
}

我是public
我是protected
我是default

  (3)在不同包存在继承关系的两个类之间,只有共有类的共有成员和共有类的保护型成员才可以被另外一个包中的子类进行访问,但是在一个子类的外部,只有共有类的共有成员才可以被直接的访问.

package com.vg.demo02;

import com.vg.demo01.*;
//在不同的包中,类的子类只有public、protected这俩个可以产生效果
public class TestAccessModifierOtherSon extends TestAccessModifier{

	public static void main(String[] args) {
		TestAccessModifierOtherSon th = 
				new TestAccessModifierOtherSon();
		th.test1();
		th.test2();

	}

}

我是public
我是protected

  (4)在不同包无任何关系的两个类之间,只有共有类的共有成员才可以被另外一个包中的类进行访问.

package com.vg.demo02;

import com.vg.demo01.TestAccessModifier;

public class TestAccessModifierOtherNotSon {
	public static void main(String[] args) {
		TestAccessModifier t = new TestAccessModifier();
		t.test1();
	}
}

我是public

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java后台防止表单重复提交方法详解

    java后台防止表单重复提交方法详解

    这篇文章主要介绍了后台防止表单重复提交,利用Session防止表单重复提交,判断请求url和数据是否和上一次相同,利用Spring AOP和redis的锁需要的朋友可以参考下
    2022-12-12
  • 五种Java多线程同步的方法

    五种Java多线程同步的方法

    这篇文章主要为大家详细介绍了五种Java多线程同步的方法,需要的朋友可以参考下
    2015-09-09
  • java中使用map排序的实例讲解

    java中使用map排序的实例讲解

    在本篇文章里小编给大家整理了一篇关于java中使用map排序的实例讲解内容,有兴趣的朋友们可以学习下。
    2020-12-12
  • gateway和jwt网关认证实现过程解析

    gateway和jwt网关认证实现过程解析

    这篇文章主要介绍了gateway和jwt网关认证实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 如何优雅的处理Spring Boot异常信息详解

    如何优雅的处理Spring Boot异常信息详解

    这篇文章主要给大家介绍了关于如何优雅的处理Spring Boot异常信息的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • SpringCloud  OpenFeign 参数传递和响应处理的详细步骤

    SpringCloud  OpenFeign 参数传递和响应处理的详细步骤

    本文给大家讲解SpringCloud  OpenFeign 参数传递和响应处理的详细步骤,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-02-02
  • 关于springboot配置druid数据源不生效问题(踩坑记)

    关于springboot配置druid数据源不生效问题(踩坑记)

    今天日常跟着网课学习,学到了整合druid数据源,遇到了好几个坑,希望这篇文章可以帮助一些和我一样踩坑的人
    2021-09-09
  • IDEA查看所有的断点(Breakpoints)并关闭的方式

    IDEA查看所有的断点(Breakpoints)并关闭的方式

    我们在使用IDEA开发Java应用时,基本上都需要进行打断点的操作,这方便我们排查BUG,也方便我们查看设计的是否正确,不过有时候,我们不希望进入断点,所以我们需要快速关闭所有断点,故本文给大家介绍了IDEA查看所有的断点(Breakpoints)并关闭的方式
    2024-10-10
  • SpringMVC对自定义controller入参预处理方式

    SpringMVC对自定义controller入参预处理方式

    这篇文章主要介绍了SpringMVC对自定义controller入参预处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring AOP定义AfterReturning增加实例分析

    Spring AOP定义AfterReturning增加实例分析

    这篇文章主要介绍了Spring AOP定义AfterReturning增加,结合实例形式分析了Spring面相切面AOP定义AfterReturning增加相关操作技巧与使用注意事项,需要的朋友可以参考下
    2020-01-01

最新评论