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

 更新时间:2020年04月20日 11:49:11   作者:知识追寻者  
这篇文章主要介绍了Java类成员访问权限控制知识总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一 前言

这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么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修饰的成员;

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

相关文章

  • Java中字符串String常用方法详解

    Java中字符串String常用方法详解

    这篇文章主要给大家介绍了关于Java中字符串String常用方法的相关资料,String表示字符串类型,是引用数据类型不是基本数据类型,String是类且是最终类,不能有子类,文中将用法介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • java中vector与hashtable操作实例分享

    java中vector与hashtable操作实例分享

    java中vector与hashtable操作实例,有需要的朋友可以参考一下
    2014-01-01
  • SpringMvc获取请求头请求体消息过程解析

    SpringMvc获取请求头请求体消息过程解析

    这篇文章主要介绍了SpringMvc获取请求头请求体消息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Spring ApplicationListener源码解析

    Spring ApplicationListener源码解析

    这篇文章主要为大家介绍了Spring ApplicationListener源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 线程池ThreadPoolExecutor并行处理实现代码

    线程池ThreadPoolExecutor并行处理实现代码

    这篇文章主要介绍了线程池ThreadPoolExecutor并行处理实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java 对象的序列化和反序列化详细介绍

    java 对象的序列化和反序列化详细介绍

    这篇文章主要介绍了java 对象的序列化和反序列化的相关资料,需要的朋友可以参考下
    2016-10-10
  • Java中如何使用Gson将对象转换为JSON字符串

    Java中如何使用Gson将对象转换为JSON字符串

    这篇文章主要给大家介绍了关于Java中如何使用Gson将对象转换为JSON字符串的相关资料,Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象,需要的朋友可以参考下
    2023-11-11
  • 关于Java Object你真的了解了吗

    关于Java Object你真的了解了吗

    下面小编就为大家带来一篇关于Java Object你真的了解了吗。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Java之WeakHashMap源码浅析

    Java之WeakHashMap源码浅析

    这篇文章主要介绍了Java之WeakHashMap源码浅析,WeakHashMap从名字可以得知主要和Map有关,不过还有一个Weak,我们就更能自然而然的想到这里面还牵扯到一种弱引用结构,因此想要彻底搞懂,我们还需要知道四种引用,需要的朋友可以参考下
    2023-09-09
  • 从入门到精通:Java List遍历修改的完全指南

    从入门到精通:Java List遍历修改的完全指南

    在Java中,我们经常需要遍历List集合并对其中的元素进行修改,这可以通过使用迭代器或for循环来实现,需要的朋友可以参考下
    2023-10-10

最新评论