Java四种访问权限

java基础(七) java四种访问权限

引言

Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用。下面整理一下,在什么情况下,有哪些访问权限可以允许选择。

一、访问权限简介

访问权限控制: 指的是本类及本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。

Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public > protected > default(包访问权限) > private ,具体的权限控制看下面表格,列所指定的类是否有权限允许访问行的权限控制下的内容:

访问权限本类本包的类子类非子类的外包类
public
protected
default
private

1、public: 所修饰的类、变量、方法,在内外包均具有访问权限;
2、protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问;
3、包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访问;
4、private: 私有的权限,只对本类的方法可以使用;

注意: 要区分开 protected 权限、包访问权限,正确使用它们;

  • 当某个成员能被所有的子类继承,但不能被外包的非子类访问,就是用protected;
  • 当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就用包访问权限;

使用访问权限控制的原因:

1)使用户不要碰触那些他们不该碰触的部分;
2)类库设计者可以更改类的内部工作的方式,而不会担心这样会对用户产生重大影响;

二、访问权限控制的使用场景

访问权限使用的场景可以总结为下面的五种场景,分别对访问权限的使用有不同的限制:

1. 外部类的访问控制

外部类(外部接口) 是相对于内部类(也称为嵌套类)、内部接口而言的。外部类的访问控制只能是这两种:publicdefault

//public 访问呢权限的外部类,所有类都可以使用这个类
public class OuterClass {}//default 权限的外部接口,所有类、接口均可以使用此接口
interface OuterInterface{}

2. 类里面的成员的访问控制

类里面的成员分为三类 : 成员变量成员方法成员内部类(内部接口)

类里面的成员的访问控制可以是四种,也就是可以使用所有的访问控制权限

public class OuterClass {public int aa; //可以被所有的类访问protected boolean bb; //可以被所有子类以及本包的类使用void cc() { //default 访问权限,能在本包范围内使用System.out.println("包访问权限");}//private权限的内部类,即这是私有的内部类,只能在本类使用private class InnerClass{}
}

注意:
这里的类里面的成员 是指类的全局成员,并没有包括局部的成员(局部变量、局部内部类,没有局部内部接口)。或者说,局部成员是没有访问权限控制的,因为局部成员只在其所在的作用域内起作用,不可能被其他类访问到。

  public void count(){//局部成员变量public int amount;//编译无法通过,不能用public修饰int money;//编译通过//局部嵌套接口class customer{//编译通过}
}

上面的两种场景几乎可以适应所有的情况,但有一些情况比较特殊,还做了有些额外访问权限的要求

3. 抽象方法的访问权限

普通方法是可以使用四种访问权限的,但抽象方法是有一个限制:不能用private 来修饰,也即抽象方法不能是私有的,否则,子类就无法继承实现抽象方法。

4. 接口成员的访问权限

接口由于其的特殊性,所有成员的访问权限都规定得死死的,下面是接口成员的访问权限:

  • 变量: public static final
  • 抽象方法: public abstract
  • 静态方法: public static,JDK1.8后才支持
  • 内部类、内部接口 : public static

也因为所有的一切都默认强制规定好了,所以我们在用的时候,并不一定需要完整写出所有的修饰符,编译器会帮我们完成的,也就是,可以少写修饰符,但不能写错修饰符。

public interface Interface_Test {public int aa = 6; //少写了  static final int bb = 5; ////嵌套接口,可以不写public staticinterface cc{}
}

5. 构造器的访问权限

构造器的访问权限可以是以上四种权限中的任意一种:

1、采用 private:一般是不允许直接构造这个类的对象,再结合工厂方法(static方法),实现单例模式。注意:所有子类都不能继承它。
2、采用包访问控制:比较少用,这个类的对象只能在本包中使用,但是如果这个类有static 成员,那么这个类还是可以在外包使用;(也许可以用于该类的外包单例模式)。
注意:外包的类不能继承这个类;
3、采用 protected :就是为了能让所有子类继承这个类,但是外包的非子类不能访问这个类;
4、采用 public :对于内外包的所有类都是可访问的;

注意: 构造方法有点特殊,因为子类的构造器初始化时,都要调用父类的构造器,所以一旦父类构造器不能被访问,那么子类的构造器调用失败,意味子类继承父类失败!

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

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

相关文章

php表单提取,php – 使用RegEx提取表单字段

使用正则表达式解析HTML可能不是最好的方法.您可以查看DOMDocument::loadHTML,这将允许您使用DOM方法处理HTML文档(例如,如果您知道这些,则使用XPath查询).您可能还想看一下Zend_Dom和Zend_Dom_Query,顺便说一句,如果您可以在应用程序中使用Zend Framework的某些部分,这是非常好…

phpexcel.php实际应用,PHP操作excel的一个例子(原创)-PHP教程,PHP应用

这是对于那些只喜欢简单处理一下excel朋友来说的//定义一个excel文件$workbook "c:/my documents/test.xls";$sheet "sheet1";//生成一个com对象$ex$ex new com("excel.sheet") or die ("连不上!!!&qu…

集成 websocket 的四种方案

集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>WebSocketConfig package cn.coder4j.study.exampl…

java异常不懂,看不懂的异常提示啊

当前位置:我的异常网 Java Web开发 看不懂的异常提示啊看不懂的异常提示啊www.myexceptions.net 网友分享于&#xff1a;2013-09-12 浏览&#xff1a;7次看不懂的错误提示啊&#xff01;&#xff01;&#xff01;&#xff01;写的一个JSP程序&#xff0c;运行时提示如下错误…

包含内部类的.java文件编译后生成几个.class文件

如果一个类有内部类&#xff0c;编译将生成几个字节码文件&#xff0c;规则是怎样呢&#xff1f; 写在前&#xff0c;自己动手丰衣足食&#xff0c;结论只有个人实验支持&#xff0c;没有官方数据支持&#xff0c;欢迎自行查阅文档然后来指正&#xff0c;轻喷&#xff0c;谢谢…

java服务端无法发送给客户端,无法从客户端向服务器发送消息

我正在开发一个应用程序&#xff0c;我需要从客户端向服务器发送消息&#xff0c;并在客户端上的文件发生更改时通知服务器 . 我在Qt中使用QTcpServer和QTcpSocket类 . 我正在写socket并从服务器端的socket读取但是我的读取失败了 .我可以知道如何将消息发布到服务器 . 我需要在…

java 泛型详解

对java的泛型特性的了解仅限于表面的浅浅一层&#xff0c;直到在学习设计模式时发现有不了解的用法&#xff0c;才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1. 概述 泛型在java中有很重要的地位&#xff0c;在面向对象编程及各种设计模式…

mysql 截取字符串部分值,Mysql字符串截取_获取指定字符串中的数据

搜索热词前言&#xff1a;本人遇到一个需求&#xff0c;需要在MysqL的字段中截取一段字符串中的特定字符&#xff0c;类似于正则表达式的截取&#xff0c;苦于没有合适的方法&#xff0c;百度之后终于找到一个合适的方法&#xff1a;substring_index(www.sqlstudy.com.cn,.,-2)…

Intellij IDEA远程debug教程实战和要点总结

远程调试&#xff0c;特别是当你在本地开发的时候&#xff0c;你需要调试服务器上的程序时&#xff0c;远程调试就显得非常有用。 JAVA支持调试功能&#xff0c;本身提供了一个简单的调试工具JDB&#xff0c;支持设置断点及线程级的调试同时&#xff0c;不同的JVM通过接口的协…

php嗅探木马,PHP安全-密码嗅探

密码嗅探尽管攻击者通过嗅探(察看)你的用户和应用间的网络通信并不专门用于访问控制&#xff0c;但要意识到数据暴露变得越来越重要&#xff0c;特别是对于验证信息。使用SSL可以有效地防止HTTP请求和回应不被暴露。对任何使用https方案的资源的请求可以防止密码嗅探。最好的方…

Idea进行远程Debug

Idea远程调试 当把一个本地项目部署到远程服务器后有可能出现意想不到错误&#xff0c;这个时候通过远程调试能够更清楚的找到bug所在位置。本篇主要讲解如何使用Idea开发工具 进行调试1.远程调试服务器上面的SpringBoot 项目2.远程调试服务器上运行在tomcat中的项目&#xff…

如何用php查不同,php-MySql调查不同查询

大家好,我确实在MySql查询中苦苦挣扎,我有一个名为“ info”的表,并且其中有一个名为“ rating”的列,评分在1-10之间.现在,我需要生成一个百分比值,该百分比值表示1-6、7-8和9-10中有多少评级,但我需要它们拼命显示,之后我需要第二个查询,该查询可以从中减去结果的百分比值1-6…

如何使用websocket实现前后端通信

如何使用websocket实现前后端通信 websocket通信是很好玩的&#xff0c;也很有用的的通信方式&#xff0c;使用方式如下&#xff1a; 第一步由于springboot很好地集成了websocket&#xff0c;所以先在在pom.xml文件中引入依赖 <dependency><groupId>org.springfr…

matlab表示DFT和DTFT,【 MATLAB 】离散傅里叶级数(DFS)与DFT、DTFT及 z变换之间的关系...

上篇博文我们简单的讨论了离散傅里叶级数DFS和离散傅里叶变换DFT之间的关系&#xff0c;简单地说&#xff0c;DFT就是DFS在一个周期内的表现。为了后面讨论方便&#xff0c;这里给出DFS的系数公式(分析公式)&#xff1a;(1) 其中&#xff1a;综合公式&#xff1a;(2) 为了对比&…

tail查看nohup.out文件内容

1.前台实时查看nohub.out文件内容&#xff1a; tail -f nohup.out 2.根据关键字查看 tail -f nohup.out |grep "关键字"3.输出文件最后100行 tail -n 100 nohup.out 4.输出文件最后100行&#xff0c;含关键字 tail -n 100 nohup.out |grep "关键字"

Linux nohup实现后台运行程序及查看(nohup与)

Linux nohup实现后台运行程序及查看&#xff08;nohup与&&#xff09; 更新时间&#xff1a;2019年09月11日 09:28:40 作者&#xff1a;猿的生活 这篇文章主要介绍了Linux nohup实现后台运行程序及查看&#xff08;nohup与&&#xff09;&#xff0c;文中通过示例代码…

php面向对象异常处理,PHP面向对象编程——自定义PHP异常处理类

/*?* WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程——自定义PHP异常处理类?* 这所以用自定义的异常类&#xff0c;主要是区分异常来自程序的哪一部分&#xff0c;比如是来自MYSQL的还是来自MODEL的?* 一般情况下&#xff0c;自定义的异常类也不要太多&#xff0c;否…

java createstatement,createStatement参数说明

Statement stmtconn.createStatement(参数一,参数二)第一个参数可以取值为ResultSet.RTYPE_FORWORD_ONLY:这是缺省值,只可向前滚动;ResultSet.TYPE_SCROLL_INSENSITIVE:双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来.ResultSet.TYPE_SCROLL_S…

websocket的用途/场景

websocket的用途/场景 先总结&#xff1a;高即时性服务&#xff0c;比如聊天室的群聊&#xff0c;server顺序收到了张三&#xff0c;李四的消息&#xff0c;立即就推送给王五&#xff0c;不能让王五等半天。 Ajax也可以一秒一刷&#xff0c;让王五去问张三说话没&#xff0c;如…

websocket学习总结记录

Websocket 1.基本概念 WebSocket是一种网络通信协议。 websocket和http 的区别&#xff0c;http的缺陷&#xff0c;只能从客户端发起请求&#xff08;单项请求&#xff09;不能从服务器发起请求。如果服务器有连续性的变化时&#xff0c;如果我们想要每一个时刻都获得最新的…