关于Java的权限修饰符(public,private,protected,默认friendly)
以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚.
现在总结如下:
一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限
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)相关推荐
- java 的构造函数修饰符public private protected
java中使用new关键字创建对象的时候,构造方法上的修饰符起什么作用? 1,限定可以创建对象的位置 使用public 修饰,new对象时,可以在任何包下的任何类中. 使用protected修饰,只能 ...
- 7 类与对象,方法和函数的定义和使用,返回值,权限修饰符 public default protected private(重点)
文章目录 1 面向对象 1 面向对象概述 2 类与对象 2.1 概述 2.2 Java中类的定义万物皆对象. 2.3Java中对象的定义和使用 3 方法和函数的定义和使用 3.1 什么是方法,函数 3 ...
- Java中四个访问修饰符public private protected 和默认(package-private)的用法详解
访问级别 访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法.有两个级别的访问控制: 1.在顶级 public或package-private(没有显式修饰符即默认权限). 类可以用修饰符pu ...
- 访问权限修饰符( public,protected,default,private )的使用对象和作用域
使用范围: Java中,外部类的修饰符只能是public或protected(默认)这两种:而类的成员(属性,方法,内部类)的修饰符可以是(public,protected,default,priva ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- Java访问修饰符public,private,protected,以及不写(默认)时的区别?
修饰符 当前类 同 包 子 类 其他包 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × × 类的成员不写访问修饰时默认为d ...
- Java 修饰符 public/private/protected/不写的区别
修饰符 本类 同包 子孙类 其他包 public ✅ ✅ ✅ ✅ protected ✅ ✅ ✅ ❌ 默认 ✅ ✅ ❌ ❌ private ✅ ❌ ❌ ❌ public:public表明该数据成员.成 ...
- 访问修饰符 public private protected default
转载于:https://www.cnblogs.com/JBLi/p/10610551.html
- java 权限修饰符大小_Java中访问权限修饰符public protected private, 缺省默认权限的用法总结...
1.访问权限符: (1)public: 对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中. 对于类来说: 也是一样. (2)friendly: 对于成员老说:如果一个类的成员没 ...
- Java访问权限修饰符
1.Class类的访问权限: public:可以供所有的类访问. 默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++.默认的访问权 ...
最新文章
- C#方法参数传递-同时使用ref和out关键字
- 兼容性—IE6/7下带有overflow:hidden属性的父级元素包不住带有position:relative属性的子元素...
- c++ opencv实现区域填充_使用OpenCV实现图像覆盖
- 双击jar运行main主函数实现-fatJAR
- 使用Docker打包发布Django应用
- [BZOJ1500][NOI2005]维修数列(splay)
- C++自定义直方图均衡化
- R 学习 - 富集分析泡泡图回应
- 树状数组入门(有被精简的树状数组所震撼到)
- CentOS系统缺少库文件解决办法
- 利用CSS按比例缩小图片
- 实用的 Python —— base64
- 2022最全知识点——RF接口自动化框架项目实战
- cad会提示计算机中缺少,cad2014缺少shx文件该怎么解决?
- java可视化tiff转pdf工具
- CasperJS 实现百度登录
- cesium 加载fbx模型
- 计算并返回 x 的 算术平方根
- 复制网站zencart模板的方法
- 基于Java毕业设计疫情下的居民管理系统源码+系统+mysql+lw文档+部署软件
热门文章
- 【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
- 教大家防止Jar包被反编译
- mysql版本问题,最近多次遇到的坑
- Chrome控制台console的各种用法(方便调试)
- [C#] DBNull、Null和String.Empty的区别
- LRU原理和Redis实现
- 数据结构——>二叉树
- 枚举smb共享期间出错_大量三星手机黑屏系统崩溃,客服:闰4月计算出错
- 计算机系统 就业前景,计算机系统结构就业前景
- android客户端日志,更新日志 - BugHD Android 客户端上线