Java语言之访问修饰符(访问控制符)
龚超 2018-06-04 来源 : 阅读 1601 评论 0

摘要:本文主要向大家介绍了Java语言之访问修饰符(访问控制符),通过具体的实例以及代码向大家展示,希望对大家学习Java语言有所帮助。

本文主要向大家介绍了Java语言之访问修饰符(访问控制符),通过具体的实例以及代码向大家展示,希望对大家学习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,或者省略。

 

如有问题请加微信号:Iotek666,本微信号会不定期推送技术相关优质文章、热点资讯、视频资源及生活趣事,也很乐意与您一起交流IT知识,让我们在闲暇之余巩固一下自己的知识体系 ,扩充一下自己的知识面。快利用琐碎时间给自己充电吧!

希望这篇文章可以帮助到你,总之同学们,it资讯尽在职坐标。

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

擅长针对企业软件开发的产品设计及开发的细节与流程设计课程内容。座右铭:大道至简!

  • 370
    文章
  • 23309
    人气
  • 87%
    受欢迎度

已有23人表明态度,87%喜欢该老师!

进入TA的空间
求职秘籍 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
WEB前端必须会的基本知识题目
经验技巧 93% 的用户喜欢
Java语言中四种遍历List的方法总结(推荐)
经验技巧 91% 的用户喜欢
Java语言之SHA-256加密的两种实现方法详解
经验技巧 75% 的用户喜欢
java语言实现把两个有序数组合并到一个数组的实例
经验技巧 75% 的用户喜欢
通过Java语言代码来创建view的方法
经验技巧 80% 的用户喜欢
其他海同师资 更多>>
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
周鸣君
周鸣君 联系TA
擅长Hadoop/Spark大数据技术
范佺菁
范佺菁 联系TA
擅长Java语言,只有合理的安排和管理时间你才能做得更多,行得更远!
金延鑫
金延鑫 联系TA
擅长与学生或家长及时有效沟通
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程