java中的访问修饰符
对Java中的修饰符一直记不住,现在结合网上的一些资料进行总结,并重点说明一下protected修饰符。
一. Java中的访问修饰符
Java面向对象的基本思想之一是封装细节并且公开接口。Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别:
(1)public: 用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问;
(2)protected: 用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问(此处稍后解释),protected重点突出继承;
(3)default: 如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected及private中任何一种修饰),则其访问权限为default(默认访问权限)。默
认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类)。default重点突出包;
(4)private: 用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外的任何类均不能访问它。
网上一些资料及一些书上用表格对java访问修饰符做了清楚的总结,如下表所示:
访问级别 |
访问控制修饰符 |
同类 |
同包 |
子类 |
不同的包 |
公开 |
public |
√ |
√ |
√ |
√ |
受保护 |
protected |
√ |
√ |
√ |
-- |
默认 |
没有访问控制修饰符 |
√ |
√ |
-- |
-- |
私有 |
private |
√ |
-- |
-- |
-- |
本人以为该表有些问题交代不清楚,如访问修饰符protected中,不同的包不可以访问,而子类可以访问,那试问位于不同包中的子类是能访问还是不能访问呢?因此本人在自
己理解的基础上,为了自己理解方便,容易记忆,重新整理了一个表格如下:
访问级别 |
访问控制修饰符 |
同类 |
同包不同类(不含子类) |
同包子类 |
不同包不同类 (不含子类) |
不同包子类 |
公开 |
public |
√ |
√ |
√ |
√ |
√ |
受保护 |
protected |
√ |
√ |
√ |
-- |
√(注意) |
默认 |
没有访问控制修饰符 |
√ |
√ |
√ |
-- |
-- |
私有 |
private |
√ |
--- |
--- |
-- |
-- |
重要总结:通过上面的分析,我们可以看到:
1. public、private和protected对我们来说没有任何异议。
2. 顶层类只能用public访问修饰符和default(默认)访问修饰符修饰,其中用默认修饰符修饰的类(及没有任何修饰符的类,如class B{})不能被其他包中的类继承,这也说明了default(默认)访问修饰符突出的是包权限
3. protected:本人做了一次实验,发现在不同包的子类中,new一个父类对象,并用该父类对象去访问父类中的用protected修饰的类属变量和方法时不能访问,而new一个子类对象时,子类对象可以访问(说明protected修饰的类可以被其他包中的类继承)。也可以在子类重写父类的方法中使用super关键字调用。这岂不是和上面表格中的总结(红色对勾)冲突了?本人也是百思不得其解。最后在网上找到了一个相对比较认可的解释,如下:
protected修饰符的修饰的成员变量和方法也称为受保护的成员变量和方法, 受保护的成员变量和方法可以在本类或同一个包中的其它类(包括子类)中通过类的实例进行访问,也可以被同一个包中的类或不同包中的类继承,但是不能在不同包中的其它类(包括子类)中通过类的实例进行访问。
4. 如果一个类使用public修饰,那该类的类名必须与他所在的源文件名相同。一个.java源文件中有且只有一个public类,顶层类只能用public和默认修饰符(即无修饰符)修饰;
5. final修饰的类不能被继承,没有子类。
6. abstract修饰的类不能被实例化,必须被子类继承。类只要有一个抽象方法就必定是抽象类,但抽象类不一定要有抽象方法。
最终总结,就一句话:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。protected属于子类限制修饰符,而default属于包限制修饰符。
java中的访问修饰符相关推荐
- [转载] 基本概念:java中的访问修饰符
参考链接: Java中类或接口的访问说明符 转自:https://www.cnblogs.com/tjudzj/p/4443066.html 对Java中的修饰符一直记不住,现在结合网上的一些资料进行 ...
- java中 访问修饰符限制性最高的是,问:JAVA中,访问修饰符限制性最高的是( )。(选择一项)...
问:JAVA中,访问修饰符限制性最高的是( ).(选择一项) A:friendly,B:protected ,C:private ,D:public 正确答案:绛旓細铻烘棆姊ā寮? 绛旓細鑷富鎬? ...
- JAVA访问修饰符限制性最高的_问:JAVA中,访问修饰符限制性最高的是protected ( )...
问:JAVA中,访问修饰符限制性最高的是protected ( ) A:对,B:错 正确答案: 解析: 问:JAVA中,访问修饰符限制性最高的是protected ( )A:对,B:错 相关问题: 密 ...
- Java中的反射和Java中的访问修饰符
什么是反射? ①在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性 ②对于任何一个对象,我们都能够对它的方法和属性进行调用 总而言之:它反射Java语言中的一种机制,通过这种机制可以动 ...
- Java中的访问修饰符详解
Java一共提供了3个访问修饰控制符:private.protected.public,代表了三种访问控制级别,另外还有一个不加任何访问控制符的访问控制级别,一共提供了4中访问控制级别. 访问控制级别 ...
- java中的访问修饰符 (2013-10-11-163 写的日志迁移
访问级别 修饰符 同类 同包 子类 ...
- java 中的访问修饰符
一. public:所有类都可以访问 protected:所有子类和同包下的类都可以访问 缺省:同包类都可以访问 private:类本身才可以访问 注意点:protected修饰类属性时,例如 pac ...
- Java final修饰符的作用,Java中的final修饰符
1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的, ...
- Java语言中的-----访问修饰符
day04 Java语言中的----访问修饰符 一.访问修饰符概述: 访问修饰符就是对变量或者是方法或者是类的一个修饰,通过修饰以后实现一些必要的权限,主要是说明类成员如何被使用的作用. 二.访问修饰 ...
最新文章
- partially initialized module ‘numpy‘ has no attribute ‘array‘ (most likely due to a circular import)
- 【pmcaff】2014年中国移动支付用户报告
- Xcode 4.4 的新特性 | LLVM 4.0 的新语法
- Mac OS X 10.10.3对SSD开启Trim功能
- 【Spring】白话IoC及容器的初始化
- 手把手教你安装Sketch破解版和measure插件
- python读取tiff文件_怎么用python读取和写入TIFF文件1
- Android垂直方向滚动的跑马灯,带gif
- 人民币大写转换-Java 8
- deepfake 图片_找到那张假照片!对抗Deepfake之路
- 丧心病狂的前端冷知识
- Volatility内存取证使用
- 如何导出微信公众号文章数据!
- DNSPod十问侯家文:如何为中小企业的网络安全保驾护航?
- 阿里云域名购买流程和备案流程
- python374安装教程_Centos7.6安装工具(5)--编译安装python374
- 在Linux下搭建 miniGUI mStudio环境
- html5程序 pdf,jsPDF – 基于 HTML5 的强大 PDF 生成工具
- 论文阅读:知识图谱技术综述
- iOS 开发中农历与公历的转换,星座计算。
热门文章
- NeHe OpenGL教程 第四十课:绳子的模拟
- 关于struts1的配置
- 辞职后五险一金的处理方式
- (转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
- Oracle note 基礎入門篇1
- ssh_exchange_identification: Connection closed by remote host 问题的解决 (转)
- Android View篇之自定义验证码输入框
- C# API中的模型和它们的接口设计
- Centos6.5升级gcc for qt5.3.1
- 在FCKeditor 2.6中添加插入视频和音频功能