zoukankan      html  css  js  c++  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. class Teddy extends Dog// 泰迪
    7.     void bark() {
    8.         System.out.println("汪汪,我好怕,不要跟着我");
    9.     }
    10. }

    如果把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.     void hungry()// 饥饿
    9.         System.out.println("主人,我饿了");
    10.     }
    11. }

    访问控制和继承

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

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

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

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

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

    如何使用访问控制符

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

      • 当需要让自己编写的类被所有的其他类访问时,就可以将类的访问控制符声明为 public。
      • 当需要让自己的类只能被自己的包中的类访问时,就可以省略访问控制符。
      • 当需要控制一个类中的成员数据时,可以将这个类中的成员数据访问控制符设置为 public、protected,或者省略。
  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/ganbing/p/6284862.html
Copyright © 2011-2022 走看看