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. 外部类的访问控制

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

//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 static

interface cc{

}

}

5. 构造器的访问权限

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

1、采用 private:一般是不允许直接构造这个类的对象,再结合工厂方法(static方法),实现单例模式。注意:所有子类都不能继承它。

2、采用包访问控制:比较少用,这个类的对象只能在本包中使用,但是如果这个类有static 成员,那么这个类还是可以在外包使用;(也许可以用于该类的外包单例模式)。

注意:外包的类不能继承这个类;

3、采用 protected :就是为了能让所有子类继承这个类,但是外包的非子类不能访问这个类;

4、采用 public :对于内外包的所有类都是可访问的;

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

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

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

相关文章

centos 使用java_如何在CentOS 8上安装Java

Java是用于构建不同类型的应用程序和系统的最流行的编程语言之一。Java有两种不同的实现,OpenJDK和Oracle Java,两者之间几乎没有区别,只是Oracle Java具有一些其他的商业功能。 Oracle Java License仅允许该软件的非商业使用,例如…

kafka java客户端加密_kafka消息加密(SASL/PLAIN)

kafka消息加密(SASL/PLAIN)具体的配置方式官网已经说的很清楚了(尽量去官网看)官网配置分为以下几个步骤1、 在conf文件目录下添加文件kafka_server_jaas.conf(文件目录 文件名随意)内容如下KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requireduse…

oracle查询本月第一天_oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...

select to_char(trunc(add_months(last_day(sysdate), -1) 1), yyyy-mm-dd) "本月第一天", to_char(last_day(sysdate), yyyy-mm-dd) "本月最后一天" --Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) …

20199计算机二级java答案_计算机二级Java练习题-2019.9

是不是急于做大量的计算机等级考试题库,却因测试结果不尽人意而心慌不安?不要急!考无忧小编为大家准备了一些二级Java练习题,希望能帮助大家高效复习,轻松通关!1.下列叙述中正确的是()。A.栈是“先进先出”…

java处理请求的流程_Java Spring mvc请求处理流程详解

Spring mvc请求处理流程详解前言spring mvc框架相信很多人都很熟悉了,关于这方面的资料也是一搜一大把。但是感觉讲的都不是很细致,让很多初学者都云里雾里的。本人也是这样,之前研究过,但是后面一段时间不用发现又忘记了。所以决…

php之二叉树,数据结构之二叉树——链式存储结构(php代码实现)

/*** ClearBiTree() 清空二叉树* CreateBiTree() 创建二叉树* BiTreeEmpty() 判断二叉树是否为空* BiTreeDepth() 返回二叉树的深度* root() 返回二叉树的根* Parent() 返回给定元素的双亲* LeftChild() 要返回左孩子的元素* RightChild() 要返回右孩子的元素* LeftSibling() 要…

php 面向对象 特性,PHP面向对象三大特点学习

PHP面向对象三大特点学习class B extends A{public function __construct(){//两种方法都行A::test();parent::test();}}$bnew B();5、如果一个子类(派生类)的方法与父类的方法完全一样时(public,protected),我们称为方法覆盖或方法重写(override)&#…

云虚机php.ini在,虚拟主机php.ini在哪

虚拟主机php.ini在哪?虚拟主机php.ini文件一般放置在文件管理器的“others”文件夹中。php.ini文件控制了PHP很多方面的性能和行为,且必须命名为“php.ini”。PHP.ini文件部分配置指令简短说明:short_open_tag boolean决定是否允许使用 PHP 代…

robust off matlab,matlab_robust LM test 求指点!(空间计量)

空间计量软件包中的示例命令:trtrace((WW)*W);[N junk]size(W);[nobs k]size(x);Tnobs/N;betaresults.beta;resresults.resid;sigeres*res/nobs;WXB20;EWE0;EWY0;xpxix*x\eye(k);WXBkron(speye(T),W)*x*beta;MWXB(speye(N*T)-x*xpxi*x)*WXB;WXB2WXB*MWXB;for t1:Tt1…

2019matlab中的floyd,基于matlab的floyd算法详解

function [d,path]floyd(a,sp,ep)% floyd - 最短路问题%% Syntax: [d,path]floyd(a,sp,ep)%% Inputs:% a - 距离矩阵是指i到j之间的距离,可以是有向的% sp - 起点的标号% ep - 终点的标号%% Outputs:% d - 最短路的距离% path - 最短路的…

.1 matlab,1 MATLAB集成环境

启动MATLAB后,将进入MATLAB集成环境。MATLAB集成环境包括MATLAB主窗口、命令窗口(Command Window)、工作空间窗口(Workspace)、命令历史窗口(Command History)、当前目录窗口(Current Directory)和启动平台窗口(Launch Pad)。一、命令窗口命令窗口是MATLAB的主要交互…

matlab 读取mov文件格式,VideoReader 支持的文件格式 - MATLAB VideoReader.getFileFormats - MathWorks 中国...

获取受支持的文件格式。formats VideoReader.getFileFormats()Video File Formats:.asf - ASF File.asx - ASX File.avi - AVI File.m4v - MPEG-4 Video.mj2 - Motion JPEG2000.mov - QuickTime movie.mp4 - MPEG-4.mpg - MPEG-1.wmv - Windows Media Video此输出适用于 Windo…

java parseint(12.0),如何实现一个parseInt

如何实现一个parseIntfunction(string, [radix]) {}如果string不为字符串类型, 则先将string转化为字符串类型string会忽略前后的空白依次解析字符, 如果字符不是指定基数中的字符( 例如:2进制中的3、 10进制中的f )则停止解析( 首字符为或-时除外 ), 返回已经解析好的整数如果…

matlab 类 继承,继承MATLAB中的密封类

在MATLAB中,一个类的attributes之一(在classdef之后定义)是Sealed,这意味着没有类可以将它用作超类(或者更确切地说,“表示这些类没有被设计为支持子类. “1).例如,如果我尝试实例化一个定义如下的类(考虑表是密封的)&#xff1a;classdef SomeLie < tableend我会得到’MATL…

smarty 引用php类,smarty 的PHP引用

摘要&#xff1a;<?phpsession_start ();//改时区date_default_timezone_set("PRC");//引入模板引擎require smarty.init.php;//对象class test{public $site"php中文网";public function welcome(){return &session_start();//改时区date_default…

平行志愿遵循分数优先php,2020平行志愿的录取规则是什么有哪些优势

摘要&#xff1a; 2020平行志愿的录取规则是什么有哪些优势为你介绍平行志愿的投档原则仍为“分数优先&#xff0c;遵循志愿”&#xff0c;而传统的顺序志愿则是根据“志愿优先&#xff0c;按分排序”。 2020平行志愿录取规则 平行志愿的投档原则仍为“分数优先&#xff0c;遵循…

qq收不到oracle邮件,腾讯企业邮箱发送邮件失败

一直使用的腾讯企业邮箱&#xff0c;但是最近发现发送邮件全是失败的&#xff0c;提示&#xff1a;javax.mail.MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 25;nested exception is:java.net.ConnectException: 连接超时 (Connection time…

Oracle quartile函数,Oracle分析函数六——数据分布函数及报表函数

Oracle 分析函数——数据分布函数及报表 函数CUME_DIST功能描述&#xff1a;计算一行在组中的相对位置&#xff0c; CUME_DIST 总是返回大于 0 、小于或等于 1 的数&#xff0c;该数表示该行在 N 行中的位置。例如&#xff0c;在一个 3 行的组中&#xff0c;返回的累计分布值为…

oracle ora 03137,今天遇到奇怪的ORA-03137错误(包含trc文件)

今天下午同事突然反映&#xff0c;打开一个用户数据的时候报错&#xff1a;ora-03114:未连接数据库很奇怪的错误信息&#xff0c;查看alert log文件系统在报错&#xff1a;2010/6/24 13:46:46 Thu Jun 24 13:46:46 2010Errors in file /u01/oracle/diag/rdbms/orcl/orcl/t…

redhat配置oracle yum源,Redhat5和6 YUM源配置的区别

一、概述随着各个软件版本的不断升级&#xff0c;我们需要掌握的软件特性也越来越多&#xff0c;技术的不断更新也促进了我们脑细胞的循环。 今天在配置RedHat6.3的yum源时也出现了一个有趣的事情&#xff0c;下面请听俺道来。二、问题处理问题源于哥们处&#xff0c;自己就搭建…