java中default_Java 中关于default 访问权限的讨论

Java中关于成员变量访问权限问题一般书中会给出如下表格:

a0202f441b211b5a174d1182427f339e.png

简单地描述一下表中的内容:用private 修饰的成员变量只能在类内部访问;用default修饰的成员变量可以再内部访问,也可以被同个包(同一目录)中的类访问;default修饰的成员变量既可以在类内部访问,又可以被同个包中的类访问,还能被子类访问;public可以被任何地方的类访问。

我们可以用隐私程度来表示各种修饰符的权限,即:private > default > protected > public。private 、 protected 、public我们先不讨论其访问,我们着重讨论default的访问权限。在定义类的成员变量时,不用default去修饰成员变量,即是说,如果没有修饰符Java就将它默认是default类型的成员变量,如:int age; 。如果加了default则编译时会报错。按照以上说法,default型的成员变量是不能够在子类中被访问的,但是,事实上是不是如此呢?其实不然,这里缺少了一个限制条件,那就是子类和父类不在同一包中时,default型的成员变量是不能够在子类中被访问。即是说,如果子类和父类在同一包中,那么父类的default型的成员变量是能够被子类访问的。我们来举个例子:文件名是:Inherite.java

class Person{

String name;

protected int age;

}

class Student extends Person{

String school;

double score;

}

public class Inherite {

public static void main (String [] argv ){

Student S = new Student ();

S.name = "卓增泗";

S.school = "交通大学";

S.age = 24;

S.score = 95.5;

System.out.println("我是" + S.name + ",今年" + S.age + "岁,毕业于" + S.school + ",平均成绩是:" + S.score);

}

}

最终的结果是:

b72f5e117bc7a7dc7b2b8862ac45fc92.png

这个结果说明,子类是可以访问父类的default型的成员变量的。但是,当它们不在同一包中呢?我们再举一个例子:文件名1:Person.java  文件名2:Inherite1.java

//文件1:Person.java

package heri;

public class Person {

String name;

public int age;

}

这个文件编译后*.class文件位于heri文件夹中,编译命令为:javac -d . Person.java

//文件名:Inherite1.java

class Student extends Person{

String school;

double score;

}

public class Inherite1 {

public static void main (String [] argv ) {

Student S = new Student ();

S.name = "卓增泗";

S.school = "交通大学";

S.age = 24;

S.score = 95.5;

System.out.println("我是" + S.name + ",今年" + S.age + "岁,毕业于" + S.school + ",平均成绩是:" + S.score);

}

}

最终结果为:

a7d3bb0b627f54349e297683dc8a9c14.png

可知,编译出现了两个错误,即是default型的成员变量。

那么如何来解释这一现象呢?前面说过,因为隐私程度default高于protected,所以在同一包中时,子类也是一种类,这样子类就被视为是同一包中的类,这样的话子类就具有default的访问权限了。当不在同一包中时,子类就没有default的访问权限了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 输出当月日历_java 实现打印当前月份的日历

实现当前日历的打印,当前日期用*来表示。关键得出这个月的第一天是星期几。基姆拉尔森计算公式W (d2*m3*(m1)/5yy/4-y/100y/400) mod 7在公式中d表示日期中的日数1,m表示月份数。y表示年数。注意1:在公式中有个与其它公式不同的地方&#xff…

xmlhttprequest 跨域_跨域资源共享(CORS)安全性

跨域资源共享(CORS)安全性背景 提起浏览器的同源策略,大家都很熟悉。不同域的客户端脚本不能读写对方的资源。但是实践中有一些场景需要跨域的读写,所以出现了一些hack的方式来跨域。比如在同域内做一个代理,JSON-P等。但这些方式都存在缺陷&…

java 图片识别 tess4j_图像文字识别(四):java调用tess4j识别图像文字

转自:https://blog.csdn.net/a745233700/article/details/80203340javajava调用tess4j识别图像文字Tesseract-OCR支持中文识别,而且开源和提供全套的训练工具,是快速低成本开发的首选。前面记录过在java中调用tesseract-orc,该方法…

sql in转换为join_同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)

《数据库允许空值,往往是悲剧的开始》一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等不一样的值究竟是什么含义。今天花1分钟简…

java字符串笔试题_五道Java常见笔试题及答案汇总

1、String和StringBuffer的区别?答:Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行…

遥感原理与应用孙家炳_2.2遥感应用模型

章节概览遥感应用模型是遥感的一种定量化手段,通常在遥感领域有一个更广为人知的名词——定量遥感。但是定量遥感是一种方法模型而非技术手段,随着科学的发展,热门越来越体会到定量遥感的必要性。定量遥感的应用是十分广泛的,也是…

喜马拉雅 xm文件转m4a_喜马拉雅电台、课程语音如何转成文字?

今天看了一篇文章“AI面前人类一败涂地”就是说了AI的发展让所有的事情几乎都可以实现科技化,无需人工操作,工作效率还比人工要高很多。这样说来的确是这样。语音转换也是其中一门技术,人们现在对于语音的交流很多,比如社交软件的…

java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解

大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解。Java注解有以下几个知识点:元数据注解的分类内置注解自定义注解注解处理器Servlet3.0本文先介绍前面4个知识点:元数据…

酷狗音乐linux版_酷狗音乐概念版APP内测获用户好评:极简化,更高级

这两天在网上冲浪的时候,发现不少网友都在安利一个叫做“酷狗音乐概念版”的APP,难道是酷狗又在闷声搞大事了?搜了一下发现,原来是酷狗音乐概念版APP已经开始进入内测阶段,尝试着下载使用,果然发现“更酷更…

java 计算器类图_多态计算器(封装、继承、多态、简单工厂)

一.封装向对象程序设计中,一个非常重要的技术便是封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。这样做的好处在于可以使类内部的具体实现透明化&#xff…

图书管理系统 java 源码_[源码和文档分享]基于C语言和SQL SERVER数据库实现的图书管理系统...

摘 要本文根据《数据库应用系统设计》课程要求而做。选择图书馆管理系统设计与开发是因为觉得图书馆管理系统对我们的帮助很大,并且经常去图书馆,对图书馆的大部分功能及流程还是比较了解,而且现在有些地方可能还不够完善。这次课程设计目标是…

sql server 修改字段不能为空_SQL-SQL介绍

一SQL 介绍SQL(Structured Query Language),语义是结构化语言, 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统;二 数据库介绍2.1 数据库我们已经知道了SQL是操作数据库的语言,那么数据库是什么&a…

拼接的option会多出空行_Word空格,空行,页眉横线等问题,我只花一分钟就全解决了...

从网上复制下来的资料粘贴到Word文档上,出现了许多空格、空行、页眉横线等问题,这时候我们该如何快速地解决这些问题,看看下面的操作你就知道了。一、删除空格1、空格案例从网上复制下来的文字到Word文档中,出现字与字之间有好多空…

oracle连接工具_扯一扯Tableau软件配置数据源系列之Oracle

作者:扯蛋君编辑:齐天大圣声明:本文章仅用于Taleau软件的应用、学习沟通,不代表Taleau公司;文中所示截图来源Taleau官方及软件公开内容,相应著作权归Tableau所有。 今天给大家介绍Tableau工具如何连接数据库…

如何和后台接触的_后台产品,不只是做支持

最近在招聘后台产品经理,面试过程中提到一个问题,这个问题之前也困扰了我很久:你做的后台产品,价值体现在哪里?只是做业务支持么?今天就来聊聊这个话题。我是做后台产品出身,最开始入行做的是云…

云计算呼叫中心_干货|云呼叫中心系统和传统呼叫中心系统的区别在哪?

随着社会的发展,呼叫中心由传统的呼叫中心逐渐发展为云呼叫中心。然而关于这两者的区别,您知道吗?跟随畅远技术一同来了解一下吧......一、购买、安装不同传统呼叫中心软件在配置方面有几个特点:一次购买终身使用;安装…

隔一段时间查找一次 golang_剑指 offer-04 二维数组中的查找

算法名称:二维数组中的查找题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该…

在线电脑配置PHP源码,域名授权系统PHP源码 V2.7.0 支持盗版追踪

最新漂亮简洁大气的域名授权系统PHP源码,域名授权系统PHP版,功能强大带有后台,经过版本升级,全新美观大气的UI洁面!支持盗版追踪,与卡密系统对接购买卡密对域名进行授权,支持授权代码、到期时间…

php 504网关,504 gateway timeout什么意思

504 gateway time-out(504网关超时错误)是HTTP状态代码,这意味着一个服务器在尝试加载网页或填写浏览器的另一个请求时未从其访问的另一台服务器收到及时响应。换句话说,504错误通常表明不同的计算机,即您正在获取504消息的网站无法控制但依赖…

python 二维数组长度_剑指offer二维数组中的查找【Java+Python】

点击上方"蓝字",关注了解更多二维数组中的查找1. 题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组…