`
0428loveyu
  • 浏览: 29043 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java访问控制符总结

 
阅读更多

Java中的控制符,用来控制其他类能否访问Java中的某一方法、变量,即控制java类、方法、变量的可见性、可访问性,从而实现数据封装。Java中有两个级别的访问控制符。

  • 类级别:控制其他类能否使用该类。有2中类型: public 和 package-private
  • 成员级别:控制某一方法、变量的访问权限。有4种类型: public , protected, package-private, private。
首先解释一下“使用”一词到底是什么意思?对于方法,很显然就是调用;对于变量,则是指访问或者修改;而对于类,则是指继承、实例化等,也就是能否在import中导入。
需要注意的事,方法和变量的访问控制实在类级别访问的基础之后增强的,也就是先经过类级别这层控制之后,再加上成员级别的控制。通过这两个级别的权限控制,可以对Java中的类、方法、变量进行精确控制,进而实现我们想要的任何程度的数据封装。下面分别介绍着两个级别的访问控制符。

类级别:

一个类可以被声明为public,在这种情况下,这个类可以被任何其他类导入使用(但是具体到某个方法或者变量时,需考虑第二层成员级别控制)。
如果类没有控制访问描述符,则表示默认,也就是包私有(package-private),这时该类除了能在本类中使用外,还能被同一个包中的其他类使用。注意包的概念,不包括子包。
备注:如果是内部类,可以使用private修饰符。下面的讨论都针对一般类

成员级别:

成员级别可以使用类级别中的public, package-private,其意义与类级别完全一样。除此之外还可以使用private和protected。但是要注意,默认方式不能用于接口变量和方法。
private:如果某个成员被private修饰,则它只能在它所在的类中被使用(The private modifier specifies that the member can only be accessed in its own class.)。
protected: 如果用protected修饰,除了能被同一个包中的其他类(无论是否继承自该类)使用之外,还能被其他包中的子类使用。(The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and,in addition, by asubclass of its class in another package.)注意接口中的变量和方法一样不能使用protected修饰符。

总结如下表:


例如,有两个包one和two,四个类如下图所示



对于Alpha这个类中的成员,其他类的访问权限如下表:



继承与访问修饰符:

继承中,子类和父类的修饰符需要遵守一些规则,具体如下:

父类方法为public,子类也必须为public
父类为protected,子类必须为protected或者public
父类中的private方法没有继承的说法。

子类继承自父类,所以父类中提供的方法接口,子类都必须提供。否则,如果我们将一个子类的对象赋给父类对象,就会出问题。如下:
public class Animal {
  public String getName() { return this.name; }
}

public class Lion extends Animal {
  private String getName() { return this.name; }
}
Animal lion = new Lion();
System.out.println( lion.getName() );//invalid

此时,lion声明为Animal类型,但它的实际类型是Lion。Animal类型提供了公开的getName接口,而子类却变成private,不行!!

一个疑惑

假设现在我们将一个类声明为package-private,也就是这个类只能被跟它在同一个包的类使用。那么在这个类当中,一个声明为protected或者public的方法似乎已经不是很有意义,因为默认的package-private就已经足够了,其他包中的类不能使用这个类,更不用说使用方法了,那么在实际开发中呢,到底什么样的实践才是最佳的,有待进一步研究。

(转载请注明出处)




分享到:
评论

相关推荐

    java类、对象、成员、package、import、访问修饰控制符总结

    java类、对象、成员 package、import、访问修饰控制符 接口和抽象类 细心总结,解惑上述所引起的一些困惑

    Java四种访问控制修饰符知识点总结

    本篇文章给大家详细分析了Java四种访问控制修饰符的相关知识点,有兴趣的朋友可以参考学习下。

    JAVA程序的总结和提升

     关键字public被称作访问修饰符(access modifier),用于控制程序的其它部分对这段代码的访问级别。  关键字class 表明Java 程序中的全部内容都包含在类中,Java是一种纯面向对象的语言。  一个源文件中至多...

    Java 修饰符和运算符

    一、访问控制修饰符 Java 支持 4 种不同的访问权限: private 私有的 protected 受保护的 public 公共的 default 默认 1、访问权限 总结成如下表格: 修饰符 当前类 同一包内 子孙类 其他包 public yes yes yes yes ...

    java 编程入门思考

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

    java 面试题 总结

    它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是...

    Java2游戏编程.pdf

    本书将向读者展示用Java语言和它的类库创建2D游戏,所涉及的主题包括高速性能、双缓冲图像、动画、声音、媒体控制、I/O和网络支持等。将带领大家一步一步学习编写Java游戏,最终打造属于自己的Java游戏。 目录...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Thinking in java4(中文高清版)-java的'圣经'

    + 和 += 3.14 使用操作符时常犯的错误 3.15 类型转换操作符 3.15.1 截尾和舍入 3.15.2提升 3.16 Java没有“sizeof” 3.17 操作符小结 3.18 总结 第4章 控制执行流程 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Java语言基础下载

    访问控制 89 方法重载(method overloading) 91 方法覆盖(method overriding) 93 基于继承的多态实现 94 隐藏(hiding) 95 构造方法在继承中的使用 96 super关键字 97 包装类 97 toString( )方法 100 内容总结 101 ...

    Java初学者入门教学

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

    java联想(中文)

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

    JAVA_Thinking in Java

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

    JAVA基础课程讲义

    使用访问控制符,实现封装 76 封装的使用细节 76 多态(polymorphism) 76 为什么需要多态? 76 如何实现多态? 77 方法绑定(method binding) 77 静态绑定 77 动态绑定 77 多态的使用要点 78 对象的转型(casting) 79 ...

    Thinking in Java简体中文(全)

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

    Java入门教程(微学苑)-part1

    3.11 如何使用访问控制符 47 3.12 Java变量的作用域 48 3.13 Java this关键字详解 49 3.14 使用this区分同名变量 49 3.15 作为方法名来初始化对象 50 3.16 作为参数传递 51 3.17 Java方法重载 52 3.18 Java类的基本...

    Thinking in Java 中文第四版+习题答案

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

    Thinking in java(中文)

    库单元 5.1.1 创建独一无二的包名 5.1.2 自定义工具库 5.1.3 利用导入改变行为 5.1.4 包的停用 5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...

Global site tag (gtag.js) - Google Analytics