一、private、protected、public和default的作用域

我们经常用着四种修饰符去修饰变量、方法和类,但是这四种的作用域都一样吗? 其中private和public可能是最多人知道的,但是protected和default可能就不知道其具体的作用域是哪些范围。先对其四种进行说明再通过案例进行证明:

public:具有最大访问权限。 可以被同一项目下的任何类所调用,一般用于对外的情况。

protected:与public不同的是不同包下的类是不能使用的,但是其子孙类除外。所以我认为这是特意为子类设计的。

default:它是针对本包设计的,它所修饰的在本包下的其他类都访问。

private:只为类本身提供。是一种封装的体现。

二、案例

案例:先声明一个类,可以供子类继承。

  1. package com.yuanfy.test.scope1;
  2. /**
  3. * @Description: 父类,其中有四种修饰符所修饰的变量和方法
  4. * @author yuanfy
  5. * @date 2017年12月8日 下午5:04:35
  6. */
  7. public class Person {
  8. private String name;
  9. int age;
  10. protected String color;
  11.  
  12. public Person(){}
  13.  
  14. public Person(String name, int age, String color) {
  15. super();
  16. this.name = name;
  17. this.age = age;
  18. this.color = color;
  19. }
  20.  
  21. public void say(){
  22. System.out.println(this.name + " say: I am " + this.color + " Person");
  23. }
  24. }

测试1:同包下面测试 四种作用域,从中可以看出private不支持在同包下的其他类使用,其他三种是支持在同包下其他类调用的。

  1. package com.yuanfy.test.scope1;
  2. /**
  3. * @Description: 同包下面测试 四种作用域
  4. * @author yuanfy
  5. * @date 2017年12月8日 下午5:11:12
  6. */
  7. public class PersonTest {
  8. public static void main(String[] args) {
  9. Person person = new Person("James", 32, "red");
  10. System.out.println("name:" + person.name);//编译报错,所以private修饰的 是不能在同包下的其他类访问
  11. System.out.println("age:" + person.age);// default
  12. System.out.println("color:" + person.color);//protected
  13. person.say();//public
  14. }
  15. }

测试2:在子孙类下测试 四种作用域(不同包的情况下,同包相当于测试1),从下面测试代码中可以看出:private和default所修饰的,不支持在子孙类下调用的,其他两种是支持在子孙类下调用的。

  1. package com.yuanfy.test.scope2;
  2. import com.yuanfy.test.scope1.Person;
  3. /**
  4. * @Description: 在子孙类下测试 四种作用域
  5. * @author yuanfy
  6. * @date 2017年12月8日 下午5:24:30
  7. */
  8. public class BlackPerson extends Person{
  9.  
  10. public BlackPerson(String name, int age) {
  11. super(name, age, "black");
  12. }
  13. public static void main(String[] args) {
  14. BlackPerson person = new BlackPerson("James", 32);
  15.  
  16. System.out.println("name:" + person.name);//private 编译报错,所以private修饰的 是不能在不同包下的子孙类访问
  17. 17 System.out.println("age:" + person.age);// default 编译报错,所以default修饰的 是不能在不同包下的子孙类访问
  18. System.out.println("color:" + person.color);//protected
  19. person.say();//public
  20. }
  21. }

测试3:不同包下面测试 四种作用域,从下面测试案例中可以看到只有public才支持不同包下的其他类(子孙类除外)调用,其他三种都不支持。

  1. package com.yuanfy.test.scope2;
  2.  
  3. import com.yuanfy.test.scope1.Person;
  4.  
  5. /**
  6. * @Description: 不同包下面测试 四种作用域
  7. * @author yuanfy
  8. * @date 2017年12月8日 下午5:11:12
  9. */
  10. public class PersonTest2 {
  11. public static void main(String[] args) {
  12. Person person = new Person("James", 32, "red");
  13.  
  14. System.out.println("name:" + person.name);//private 编译报错,所以private修饰的 是不能在其他包下的任何类访问(除了自身)
  15. 15 System.out.println("age:" + person.age);// default 编译报错,所以default修饰的 是不能在其他包下访问的。
  16. 16 System.out.println("color:" + person.color);//protected 编译报错,所以default修饰的 是不能在其他包下访问的。
  17. person.say();//public
  18. }
  19. }

所以经过上面案例分析可以得出他们分别对应有效的作用域,如下表:

作用域 当前类 同一包内 子孙类(不同包) 其他包
public
protected ×
default × ×
private × × ×
 

Java关键字(一) 修饰符private、protected、public和default的作用域的更多相关文章

  1. private,protected,public和default的区别

    private,protected,public和default的区别 除了default以外,其他都是Java语言的关键字.default代表的是对类成员没有进行修饰的情况.它本身也代表了一种访问控 ...

  2. Java 访问权限修饰符以及protected修饰符的理解

    2017-11-04 22:28:39 访问权限修饰符的权限 访问修饰符protected的权限理解 在Core Java中有这样一段话“在Object类中,clone方法被声明为protected, ...

  3. 【Java】abstract,final,static,private,protected,public的区别

    [abstract]抽象的 1. abstract可以修饰类和成员方法,被abstract修饰的类称为抽象类,被abstract修饰成员方法叫抽象方法.抽象类不一定有抽象方法,但拥有抽象方法的类一定是 ...

  4. Java中的private protected public和default的区别

    转至:http://blog.sina.com.cn/s/blog_74c571240101jaf5.html    类内部  本包  子类 外部包  public    √  √  √  √ pro ...

  5. Java中的权限修饰符private、protected、public

    java中的修饰符分类: 权限修饰符: private, default, protected, public 状态修饰符: static, final 抽象修饰符: abstract 权限修饰符 我 ...

  6. 关于Java的权限修饰符(public,private,protected,默认friendly)

    以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚. 现在总结如下: 一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限 Java访问权限修饰符包含四个:p ...

  7. Java中访问修饰符public、private、protecte、default

    Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...

  8. asp.net 修饰符介绍(关于public、private、protected、internal)

    1.private修饰符 private修饰符用于设置类或类成员的访问权限仅为所属类的内部,private也被称为私有修饰符.某些时候需要访问私有类成员时,可通过get和set访问器读取或修改. 2. ...

  9. Java中的 修饰符

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符  访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共 ...

随机推荐

  1. Jenkins项目部署使用教程-----02视图及项目添加

    注意:此以我公司为例,以svn上传代码 一.添加视图 1.点击右上角”+”号,新建新视图 勾选在该视图下显示的项目或者在该视图新建项目,点保存即可. 二.新建项目 1.点击左上角的新建,创建新项目. ...

  2. Being a Good Boy in Spring Festival(尼姆博弈)

    Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...

  3. Can you solve this equation?

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...

  4. Jimmychoo商城系统总结

    一.需求 1.游戏模块 ①在进入H5之前,首先有一个动态的探照灯的动效,然后由"淡出"效果到H5首页. ②在点击"开始游戏"之后会有一段动画演示游戏内容,然后滑 ...

  5. Hacker Rank: Kingdom Division 不完全报告

    原题链接: Kingdom Division 由于树的层次可能很深,所以这里不能使用递归版的DFS.我使用了BFS. BFS确定各结点的父结点和它的孩子数. 用逆拓扑排序确定结点的计算顺序. same ...

  6. 透过浏览器看HTTP缓存[转载]

    http://www.admin10000.com/document/6299.html     作为前端开发人员,对于我们的站点或应用的缓存机制我们能做的似乎不多,但这些却是与我们关注的性能息息相关 ...

  7. 定时器解决js长时间运行脚本问题

    一般地,单个js操作的运行时间不应超过100毫秒,否则的话,会影响用户体验,用户会认为自己与界面失去联系.而对于一些复杂的任务,可能无法在100ms内完成,甚至会突破浏览器限制(调用栈大小限制和长时间 ...

  8. Problem F: 多少个最大值?

    Description 输入若干个int类型的整数,求它们的最大值及其个数. Input 输入 若干个int类型的整数,至文件尾为止. Output 输出只有一行:There are # maximu ...

  9. Problem H: STL——括号匹配

    Description 给出一堆括号,看其是否匹配,例如 ().()().(()) 这样的括号就匹配,       )(.)()) 而这样的括号就不匹配 Input 每一行代表一组测试样例,每组测试样 ...

  10. Scrum Meeting Alpha - 10

    Scrum Meeting Alpha - 10 NewTeam 2017/11/06 地点:主楼和3号楼之间的走廊2楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了对涉及内容修改的API的 ...