Java类成员访问权限控制知识总结

所属分类: 软件编程 / java 阅读数: 57
收藏 0 赞 0 分享

一 前言

这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性;将类成员使用不同的访问级别控制,在数据封装后,其他的类成员想要访问当前类成员,就必须要有足够的权限才能访问;这样做的目的就是我可以随意修改不想让其他类成员没有权限访问的数据,只要约定好相关的协议,不影响其他类成员访问即可;

二 权限修饰词介绍

  • public 意指公有的意思,其修饰的成员权限最低,表示任何成员都可以访问;注意点是一个java源文件中只能有一个类被声明为public;
  • defaut 默认级别,成员没有修饰符号,在同一个包内能被其他成员访问;
  • protected 受保护的意思;表示子类能够继承父类的方法;在同一个包内被其修饰的成员,其子类能够访问;注意点是不可以修饰外部类;
  • private 私有的意思;权限最高,表示只允许类内部成员可以访问;注意点是不可以修饰外部类;

修饰符 同一个类中 同一个包中的其他类 不同包的子类中 不同包的非子类中
public true true true true
protected true true true
default true true
private true

三 具体实施

3.1 public

在com.youku1327.base.authority2 包中创建了一个星球类,有个成员是shine表示光线,对应的getShine方法使用public修改,方法意思是获得光线;

package com.youku1327.base.authority2;
/**
 * @Author lsc
 * <p> 星球类 </p>
 */
public class Planet {
  private String shine = "好耀眼";
  public String getShine(){
    return shine;
  }
}

在 com.youku1327.base.authority1 包中创建类ZSZXZ, 使用import com.youku1327.base.authority2.Planet;导入 Planet星球类;在main方法中创建星球类,调用获得光线的方法,得到输出结果是 好耀眼;验证了public权限最低,不同包之间得非子类就可以访问;

package com.youku1327.base.authority1;
import com.youku1327.base.authority2.Planet;
/**
 * @Author lsc
 * <p> </p>
 */
public class ZSZXZ {
  public static void main(String[] args) {
    // 创建星球实体
    Planet planet = new Planet();
    // 访问公有成员
    String shine = planet.getShine();
    // 好耀眼
    System.out.println(shine);
  }
}

将 星球类的getShine方法修饰符号改为 protected;

package com.youku1327.base.authority2;
/**
 * @Author lsc
 * <p> 星球类 </p>
 */
public class Planet {
  private String shine = "好耀眼";
  protected String getShine(){
    return shine;
  }
}

在com.youku1327.base.authority1中创建Earth类继承星球类Planet(初学者只要理解extends关键字表示继承的意思),继承的方法是 getShine方法,然后在主类中创建地球实例,调用getShine方法,实际上是调用 Planet的 getShine 方法(super.getShine(),super意指高级,表示父类 );验证了不同包的子类可以调用父类被protected修饰的成员;

package com.youku1327.base.authority1;

import com.youku1327.base.authority2.Planet;

/**
 * @Author lsc
 * <p> 地球类</p>
 */
public class Earth extends Planet {
  @Override
  protected String getShine() {
  	// 调用了父类的getShine方法
    return super.getShine();
  }
	// 执行前注释掉ZSZXZ中的main方法
  public static void main(String[] args) {
    // 创建地球
    Earth earth = new Earth();
    // 好耀眼
    System.out.println(earth.getShine());
  }
}

在回去看看原来的ZSZXZ类的getShine发现报错了;验证了不同包的非子类,使用protected修饰无法访问;

3.3 default

将 Planet 星球类 的 getShine 方法的修饰符去掉,代码如下

package com.youku1327.base.authority2;
/**
 * @Author lsc
 * <p> 星球类 </p>
 */
public class Planet {

  private String shine = "好耀眼";

  String getShine(){
    return shine;
  }
}

随着发现 之前的地球类报错了,我们把整个地球类注释掉;验证了default修饰的成员不能夸包访问;

我们在 Planet 的同级包下创建Moon类,调用 Planet的getShine方法,成功执行;验证了default修饰的成员能在同一个包中被访问;

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> </p>
 */
public class Moon {
  public static void main(String[] args) {
    // 创建星球实体
    Planet planet = new Planet();
    // 访问公有成员
    String shine = planet.getShine();
    // 好耀眼
    System.out.println(shine);
  }
}

3.4 private

将 Planet 星球类 的 getShine 方法的修饰符改为private;

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> 星球类 </p>
 */
public class Planet {
  private String shine = "好耀眼";
  private String getShine(){
    return shine;
  }
}

发现 之前的 的Moon类主方法中的getShine方法报错了,验证了private在同包不同类中不可以被访问;getShine() 中可以使用 shine 字段,验证了同一个类中可以使用private修饰的成员;

 private String shine = "好耀眼";
  private String getShine(){
    return shine;
  }
}

发现 之前的 的Moon类主方法中的getShine方法报错了,验证了private在同包不同类中不可以被访问;getShine() 中可以使用 shine 字段,验证了同一个类中可以使用private修饰的成员;

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

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多