Java访问修饰符(访问控制符)

  Java 通过修饰符来控制类、属性和方法的访问权限和其他功能,通常放在语句的最前端。例如:

  1. public class className {

  2. // body of class

  3. }

  4. private boolean myFlag;

  5. static final double weeks = 9.5;

  6. protected static final int BOXWIDTH = 42;

  7. public static void main(String[] arguments) {

  8. // body of method

  9. }

  Java 的修饰符很多,分为访问修饰符和非访问修饰符。本节仅介绍访问修饰符,非访问修饰符会在后续介绍。

  访问修饰符也叫访问控制符,是指能够控制类、成员变量、方法的使用权限的关键字。

  在面向对象编程中,访问控制符是一个很重要的概念,可以使用它来保护对类、变量、方法和构造方法的访问。

  Java支持四种不同的访问权限:

  修饰符说明

  public共有的,对所有类可见。

  protected受保护的,对同一包内的类和所有子类可见。

  private私有的,在同一类内可见。

  默认的在同一包内可见。默认不使用任何修饰符。

  public:公有的

  被声明为public的类、方法、构造方法和接口能够被任何其他类访问。

  如果几个相互访问的public类分布在不用的包中,则需要导入相应public类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

  下面的方法使用了公有访问控制:

  1. public static void main(String[] arguments) {

  2. // body of method

  3. }

  java程序的main() 方法必须设置成公有的,否则,Java解释器将不能运行该类。

  protected:受保护的

  被声明为protected的变量、方法和构造方法能被同一个包中的任何其他类访问,也能够被不同包中的子类访问。

  protected访问修饰符不能修饰类和接口,方法和成员变量能够声明为protected,但是接口的成员变量和成员方法不能声明为protected。

  子类能访问protected修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。

  下面的父类使用了protected访问修饰符,子类重载了父类的bark()方法。

  1. public class Dog{

  2. protected void bark() {

  3. System.out.println("汪汪,不要过来");

  4. }

  5. }

  6.

  7. class Teddy extends Dog{ // 泰迪

  8. void bark() {

  9. System.out.println("汪汪,我好怕,不要跟着我");

  10. }

  11. }

  如果把bark()方法声明为private,那么除了Dog之外的类将不能访问该方法。如果把bark()声明为public,那么所有的类都能够访问该方法。如果我们只想让该方法对其所在类的子类可见,则将该方法声明为protected。

  private:私有的

  私有访问修饰符是最严格的访问级别,所以被声明为private的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为private。

  声明为私有访问类型的变量只能通过类中公共的Getter/Setter方法被外部类访问。

  private访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

  下面的类使用了私有访问修饰符:

  1. public class Dog{

  2. private String name;

  3. private int age;

  4. public String getName() {

  5. return name;

  6. }

  7. public void setName(String name) {

  8. this.name = name;

  9. }

  10. public int getAge() {

  11. return age;

  12. }

  13. public void setAge(int age) {

  14. this.age = age;

  15. }

  16. }

  例子中,Dog类中的name、age变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两对public方法,getName()/setName() 和 getAge()/setAge(),它们用来获取和设置私有变量的值。

  this 是Java中的一个关键字,本章会讲到,你可以点击 Java this关键字详解 预览。

  在类中定义访问私有变量的方法,习惯上是这样命名的:在变量名称前面加“get”或“set”,并将变量的首字母大写。例如,获取私有变量 name 的方法为 getName(),设置 name 的方法为 setName()。这些方法经常使用,也有了特定的称呼,称为 Getter 和 Setter 方法。

  默认的:不使用任何关键字

  不使用任何修饰符声明的属性和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为public static final,而接口里的方法默认情况下访问权限为public。

  如下例所示,类、变量和方法的定义没有使用任何修饰符:

  1. class Dog{

  2. String name;

  3. int age;

  4.

  5. void bark(){ // 汪汪叫

  6. System.out.println("汪汪,不要过来");

  7. }

  8.

  9. void hungry(){ // 饥饿

  10. System.out.println("主人,我饿了");

  11. }

  12. }

  访问控制和继承

  请注意以下方法继承(不了解继承概念的读者可以跳过这里,或者点击 Java继承和多态 预览)的规则:

  ·

  父类中声明为public的方法在子类中也必须为public。

  ·

  ·

  父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。

  ·

  ·

  父类中默认修饰符声明的方法,能够在子类中声明为private。

  ·

  ·

  父类中声明为private的方法,不能够被继承。

  ·

  如何使用访问控制符

  访问控制符可以让我们很方便的控制代码的权限:

  · 当需要让自己编写的类被所有的其他类访问时,就可以将类的访问控制符声明为 public。

  · 当需要让自己的类只能被自己的包中的类访问时,就可以省略访问控制符。

  · 当需要控制一个类中的成员数据时,可以将这个类中的成员数据访问控制符设置为 public、protected,或者省略。(编辑:雷林鹏 来源:网络)

转载于:https://www.cnblogs.com/pengpeng1208/p/9138327.html

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

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

相关文章

随便聊聊,Linux 中的环境变量

大家好,今晚说点简单的。环境变量环境变量在进行linux开发过程中经常碰到,那什么是环境变量呢?很多朋友在刚学习Linux的时候对环境变量不是特别理解,变量不应该是在编程语言中类似于全局变量和局部变量吗?怎么又来了个…

什么MySQL语句在存储过程体中是合法的

什么MySQL语句在存储过程体中是合法的? 什么样的SQL语句在Mysql存储过程中才是合法的呢?你可以创建一个包含INSERT, UPDATE,DELETE, SELECT, DROP, CREATE, REPLACE等的语句。你唯一需要记住的是如果代码中包含MySQL扩充功能,那么代码将不能移…

IntelliJ IDEA使用教程(很全)

这个编辑器我就不再多做介绍了。直接开始新建maven hello world 的Java web项目啦 你电脑上得有jdk1.7,或者1.8,然后就是maven3.x吧,再有就是tomcat7以上吧。还得有我这个编辑器。这些是准备条件 下面就直接开始看图啦: 这个我刚刚…

每日一题(50)—— 各类型与零值的比较

分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var) 解答:    BOOL型变量:if(!var)    int型变量: if(var0)    float型变量: …

U-Boot之代码调试

“ 让调试U-Boot不再困难”本文介绍U-Boot的两种调试方法,一种是基于代码级别,另外一种是基于工具进行在线调试。01—DEBUG宏U-Boot自带DEBUG宏,打开该宏定义之后,会增加许多的内在打印信息供开发人员参考。这个宏定义的开关可以通…

Python中 sys.argv[]的用法

调用解释器时,脚本名和附加参数传入一个名为 sys.argv 的字符串列表。通过执行 import sys可以获取这个列表,sys.argv[0] 表示脚本的名字,sys.argv[1] 代表第一个输入参数,sys.argv[2] 代表第二个输入参数,以此类推。如&#xff1…

IT夫妻语录

IT夫妻语录 亲爱的,最近我发现你情绪低落,反应速度大大降低,是不是头脑里碎片太多?   男:我也说不清楚,我觉得越来越与同事不兼容了。   女:也许这与你和他们配置有关…

每日一题(51)—— 大小端判断

请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1。 int checkCPU() {{union w{ int a;char b;} c;c.a 1;return (c.b 1);} } 分析:嵌入式系统开发者应该对Little-endian和Big-endian模…

Android初学第21天

Android初学第21天 09_LayoutsAndWidgets 代码 SignleFragmentActivity.java package com.bignerdranch.android.criminalintent;import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.…

快两年的时间,我都干了啥

‍‍‍‍大家好,我是写代码的篮球球痴这是一篇总结性的文章,主要是总结这一年多快两年的时间,我都在做了些什么。公司名字我就不说了,知道的人一眼就知道了。我们是一家智能家居的公司。提到智能家居,就一定会涉及网关&#xff0c…

每日一题(52)—— 进程

列举几种进程的同步机制: 1)原子操作 2)信号量机制 3)自旋锁 4)管程,会合,分布式系统 网络编程中设计并发服务器,使用多进程与 多线程 ,请问有什么区别?…

ioremap,你应该知道的事

因为现在使用是dts来表示板级,也就是machine,所以现在我们在内核使用内核映射使用的函数是of_iomap。c代码:struct device_node *node NULL;unsigned int irq_info[3] { 0, 0, 0 };u32 phys_base;switch (idx) {case 0:node of_find_node_…

牙痛,肿成阴阳脸

成阴阳脸:-( 明天见不了客户了,犯愁。好在台湾的朋友非常热情,晚上还安排最好的牙医林先生在诊所等我;又有另一朋友送我神奇的东南亚牙膏。

.NET 二维码生成(ThoughtWorks.QRCode)

引用ThoughtWorks.QRCode.dll (源代码里有) 1、简单二维码生成及解码代码: //生成二维码方法一private void CreateCode_Simple(string nr) { QRCodeEncoder qrCodeEncoder new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode QRCodeEnc…

如何向开源社区奉献代码

从事嵌入式工作, 日常就是与u-boot, linux这些开源代码打交道, 将自己的代码提交到主线, 将是一件快乐而又能提升逼格的事情. 有些比较新的代码会使用github进行bug追踪, pr合并, 这些直接在github提交Pull Request就好了, 比较简单, 就不在赘述. 本文重点介绍如何使用mail lis…

每日一题(53)—— 评价代码片段

评价下面代码片段: unsigned int zero 0; unsigned int compzero 0xFFFF; /*1s complement of zero */ 对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下: unsigned int compzero ~0; 这一问题真正能揭露出应试者是…

TCP三次握手及四次挥手详解

此篇文章转载自:http://justim.blog.51cto.com/740099/237548TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchron…

zxing二维码的生成与解码(C#)

ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。 首先,在其官网http://code.google.com/p/zxing/上去下载源码 编译在其cshar…

STM32项目(一) —— 展示车座椅

STM32项目(一) —— 展示车座椅 宗旨:技术的分享是有限的,分享的精神是无限的。功能:模拟人开车时,ACR和ABL的变化。 主控制器:STM32(CAN,串口,网口&#xff…

一文读懂 | CPU负载均衡实现

在《一文读懂 | 进程怎么绑定 CPU》这篇文章中介绍过,在 Linux 内核中会为每个 CPU 创建一个可运行进程队列,由于每个 CPU 都拥有一个可运行进程队列,那么就有可能会出现每个可运行进程队列之间的进程数不一样的问题,这就是所谓的…