以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚.

现在总结如下:

一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限

Java访问权限修饰符包含四个:public,protected,friendly,private但是friendly在java中并没有显示的声明,成员变量和方法默认情况下就是friendly权限。

现在把它们的访问权限表示出来:(目前展示访问修饰符的方式主要有两种)

表示图一:(第一种展示方式,把不同的类文件分为两个变量,"是否是相同包","是否是子类".这样总共2*2=4种情况再加上本类的访问,总共5种情况都考虑进入了.我比较赞成这种分类的方式.简单明了,容易理解.)

表示图二:(这种展示方式也不错.这种展示方式多了一层,同一个类中的访问条件,但是同包中的子类和非子类统一了,Java的各个访问修饰符在同包子类和非子类的访问效果上是一样的,可以合并)

访问修饰符

同一个类

同包

不同包,子类

不同包,非子类

private

默认  

protected

public

二.首先,说明public的权限问题

定义4个类Person、People、Student、Computer,分别比较本类、同包、子类、其他包的区别。

这里要注意:当重写父类成员函数时,子类的成员函数不能比父类的成员函数权限小,一般重写把权限定义相同即可。

代码如图所示:

1.public 同类访问

 2.public 同包不同类访问(非子类)

3.public 同包不同类访问(子类)

4.public 不同包下的非子类访问:

5.public 不同包下的子类访问:

以上关于成员变量name都没有编译错误,说明public类型在这五种情况下都是没有问题的.

三.再说protected 权限的问题.

附录Person.java 截图

四.default(frienddly)权限问题.

同样定义4个类Person、People、Student、Computer,分别比较本类、同包、子类、其他包的区别。

这里要注意:default(不写默认指定default)同public一样可以修饰任何类而且类名要与文件名相同。

其他几个类的代码和public测试中的一样.

这里只附录其中一个出错Student中的代码和错误.

Person、People,Teacher类能编译通过,就说明用default修饰的类在本类、同包中互相访问都是可以的,而Student、Computer编译不通过说明default不可以在包外,不管有没有继承关系的类都不可以互相访问。

五:最后测试private权限问题

private意思是私有的,如果Person能编译通过而People、Student、Teacher,Computer编译不通过,就说明用private修饰的类只能在本类中访问。测试结果如下:

综上所述,java中4种修饰符访问权限的区别及详解全过程就此演示完了,再一次说明java语言的严谨性和安全性,我们在以后使用这4中修饰符时创建一个类,这个类的权限尽量要小,这样才能减少漏洞和提高安全性,从而体现java面向对象的封装性。

最后如图再回忆一下java中4个修饰符的访问权限:

===========================================================

补充:

一.访问权限修饰符修饰类名:

1,不能用protected和private修饰类。(上图可以看到修饰类名的修饰符只有 public abstract 和final可以.)
2,用friendly修饰的类叫友好类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中。(上面可以看出用default修饰的在包外都是无法访问的.)

二.访问权限修饰符与继承

这里的访问修饰符指的是修饰成员变量和方法。可以分为两种情况:

1,子类与父类在同一包中

此时只有声明为private的变量与方法不能被继承(访问)。

     class Father{private int money ;int weight=100;}class Son extends Father{viod f(){money=10000;//   非法weight=100; //   合法
        }}

2,子类与父类不在同一包中

此时private与friendly均不能被继承(访问), protected与public可以。

Father.java

      package com.aaa;public class Father{int height ;protected  int money=120;public int weight;protected int getMoney(){return money;}void setMoney(int newMoney){money=newMoney;}}

Son.java

      package com.bbb;import com.aaa.Father;public class Son extends Father{void f(){money=10000;//合法//height=170;//非法,height为friendly修饰的变量System.out.println(money);//输出结果是10000//setMoney(300);          //非法int number=getMoney();    //合法System.out.println(number);//输出结果是10000
          }public  static  void main(String args[]){Son sss=new Son();sss.f();}}

所以,访问权限修饰符权限从高到低排列是public  ,protected  ,friendly, private。

上面这个继承的问题实际还是访问修饰符的权限问题.

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。
2、protected:protected对于子女、兄弟来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
3、default(friendly):java的默认访问权限,这种权限通常被称为包访问权限,default对于兄弟来说,就是public的,在包之外,这些成员就变成private。

4、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。其他类想访问可以通过该类的成员方法访问如get/set

转载于:https://www.cnblogs.com/DreamDrive/p/4641676.html

关于Java的权限修饰符(public,private,protected,默认friendly)相关推荐

  1. java 的构造函数修饰符public private protected

    java中使用new关键字创建对象的时候,构造方法上的修饰符起什么作用? 1,限定可以创建对象的位置 使用public 修饰,new对象时,可以在任何包下的任何类中. 使用protected修饰,只能 ...

  2. 7 类与对象,方法和函数的定义和使用,返回值,权限修饰符 public default protected private(重点)

    文章目录 1 面向对象 1 面向对象概述 2 类与对象 2.1 概述 2.2 Java中类的定义万物皆对象. 2.3Java中对象的定义和使用 3 方法和函数的定义和使用 3.1 什么是方法,函数 3 ...

  3. Java中四个访问修饰符public private protected 和默认(package-private)的用法详解

    访问级别 访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法.有两个级别的访问控制: 1.在顶级 public或package-private(没有显式修饰符即默认权限). 类可以用修饰符pu ...

  4. 访问权限修饰符( public,protected,default,private )的使用对象和作用域

    使用范围: Java中,外部类的修饰符只能是public或protected(默认)这两种:而类的成员(属性,方法,内部类)的修饰符可以是(public,protected,default,priva ...

  5. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  6. Java访问修饰符public,private,protected,以及不写(默认)时的区别?

    修饰符 当前类 同 包 子 类 其他包 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × × 类的成员不写访问修饰时默认为d ...

  7. Java 修饰符 public/private/protected/不写的区别

    修饰符 本类 同包 子孙类 其他包 public ✅ ✅ ✅ ✅ protected ✅ ✅ ✅ ❌ 默认 ✅ ✅ ❌ ❌ private ✅ ❌ ❌ ❌ public:public表明该数据成员.成 ...

  8. 访问修饰符 public private protected default

    转载于:https://www.cnblogs.com/JBLi/p/10610551.html

  9. java 权限修饰符大小_Java中访问权限修饰符public protected private, 缺省默认权限的用法总结...

    1.访问权限符: (1)public: 对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中. 对于类来说: 也是一样. (2)friendly: 对于成员老说:如果一个类的成员没 ...

  10. Java访问权限修饰符

    1.Class类的访问权限:  public:可以供所有的类访问.  默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++.默认的访问权 ...

最新文章

  1. C#方法参数传递-同时使用ref和out关键字
  2. 兼容性—IE6/7下带有overflow:hidden属性的父级元素包不住带有position:relative属性的子元素...
  3. c++ opencv实现区域填充_使用OpenCV实现图像覆盖
  4. 双击jar运行main主函数实现-fatJAR
  5. 使用Docker打包发布Django应用
  6. [BZOJ1500][NOI2005]维修数列(splay)
  7. C++自定义直方图均衡化
  8. R 学习 - 富集分析泡泡图回应
  9. 树状数组入门(有被精简的树状数组所震撼到)
  10. CentOS系统缺少库文件解决办法
  11. 利用CSS按比例缩小图片
  12. 实用的 Python —— base64
  13. 2022最全知识点——RF接口自动化框架项目实战
  14. cad会提示计算机中缺少,cad2014缺少shx文件该怎么解决?
  15. java可视化tiff转pdf工具
  16. CasperJS 实现百度登录
  17. cesium 加载fbx模型
  18. 计算并返回 x 的 算术平方根
  19. 复制网站zencart模板的方法
  20. 基于Java毕业设计疫情下的居民管理系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. 【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
  2. 教大家防止Jar包被反编译
  3. mysql版本问题,最近多次遇到的坑
  4. Chrome控制台console的各种用法(方便调试)
  5. [C#] DBNull、Null和String.Empty的区别
  6. LRU原理和Redis实现
  7. 数据结构——>二叉树
  8. 枚举smb共享期间出错_大量三星手机黑屏系统崩溃,客服:闰4月计算出错
  9. 计算机系统 就业前景,计算机系统结构就业前景
  10. android客户端日志,更新日志 - BugHD Android 客户端上线