2024 桐庐半程马拉松
00:00:00
时间
0.00
距离(公里)
--:--
配速
--
步频
--
心率 (bpm)
--
配速
步频
|
share-image
ESC

Java 中的访问修饰符

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

Java 的修饰符很多,分为访问修饰符和非访问修饰符。

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

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

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

修饰符 说明
public 共有的,对所有类可见。
protected 受保护的,对同一包内的类和所有子类可见。
private 私有的,在同一类内可见。
默认的 在同一包内可见。默认不使用任何修饰符。

public:公有的

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

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

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

public static void main(String[] args) {

Teddy d = new Teddy();

d.bark();
}

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

protected:受保护的

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

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

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

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

  
public class Dog {

protected void bark() {
System.out.printf("汪汪,不要过来");
}
}

class Teddy extends Dog { // Teddy 继承父类 Dog

protected void bark() { // 重写了 bark 方法
System.out.printf("汪汪,我好怕,不要跟着我");
}

public static void main(String[] args) {

Teddy d = new Teddy();

d.bark();
}
}

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

private:私有的

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

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

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

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

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

访问控制和继承

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

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

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

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

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

如何使用访问控制符

访问控制符可以让我们很方便的控制代码的权限:
当需要让自己编写的类被所有的其他类访问时,就可以将类的访问控制符声明为 public。
当需要让自己的类只能被自己的包中的类访问时,就可以省略访问控制符。
当需要控制一个类中的成员数据时,可以将这个类中的成员数据访问控制符设置为 public、protected,或者省略。

文章作者:阿文
文章链接: https://www.awen.me/post/47679.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客
本文于 2018-04-12 发布,已超过半年(2849天),请注意甄别内容是否已过期。