Java里的4种访问修饰符(private、protected、public和默认)
在 Java 程序中,我们经常看到 public、private 之类的关键字,它们统称为访问修饰符,既可以用来修饰类,也可以用来修饰方法和属性。
访问修饰符用于控制指定元素(类、接口、方法、属性)的可访问性,比如我们将一个类的属性设为私有,则它只能在该类中被访问,其他类无法直接访问它。
Java 一共包含 4 种访问修饰符,分别为 private、默认、protected 和 public。
下面我们通过一张表格来详细看看 4 种访问修饰符的访问控制范围。
	
例如:
【实例 1】默认访问修饰符。
【实例 2】相同包访问默认类。
【实例 3】不同包访问默认类。
【实例 4】protected 修饰符。
【实例 5】访问 protected 属性及方法。
【实例 6】 public 修饰符。
【实例 7】 访问 public 属性及方法。
在了解了 Java 中的 4 种访问修饰符后,我们来总结一下访问修饰符的作用。
从字面上理解,修饰符的作用就是用于控制访问。对于某些私有的数据,需要通过访问控制来防止不正当的数据操作。从类的角度来看,通过对数据和方法的访问控制可以实现封装性,该类就好比是一个黑箱供开发者使用,而其内部的具体实现则禁止被随意修改。
	
	
访问修饰符用于控制指定元素(类、接口、方法、属性)的可访问性,比如我们将一个类的属性设为私有,则它只能在该类中被访问,其他类无法直接访问它。
Java 一共包含 4 种访问修饰符,分别为 private、默认、protected 和 public。
下面我们通过一张表格来详细看看 4 种访问修饰符的访问控制范围。
| 访问修饰符 | 类内部 | 同一个包内 | 不同包的子类 | 不同包的非子类 | 
|---|---|---|---|---|
| private | 可访问 | 不可访问 | 不可访问 | 不可访问 | 
| 默认 | 可访问 | 可访问 | 不可访问 | 不可访问 | 
| protected | 可访问 | 可访问 | 可访问 | 不可访问 | 
| public | 可访问 | 可访问 | 可访问 | 可访问 | 
Java private访问修饰符
private 表示私有的,对于被它声明的元素(变量或方法),只能在当前类内部对其进行访问。注意,该修饰符不能用于修饰类和接口。例如:
public class ModifierPrivateTest {
    public static void main(String[] args) {
        Box box = new Box();
        System.out.println(box.name);
        box.open();
    }
}
class Box {
   
}private String name;
    private void open() {
        System.out.println("open box");
    }
}
其中 Box 类中定义了一个 private 的变量和一个 private 的方法。我们在另一个 ModifierPrivateTest 类中通过 box 对象访问它的 name 变量和 open 方法,此时将会导致编译错误,具体错误消息为“The field Box.name is not visible”和“The method open() from the type Box is not visible”。可以看到由于它们都是私有的,因此不能被其他类访问。Java默认访问修饰符
默认表示不使用任何访问修饰符,默认情况下的方法、属性、类和接口只能被相同包下的类访问,其他包的类无法访问。【实例 1】默认访问修饰符。
package com.seaboat;
class Box {
    String name = "box";
   
    void open() {
         System.out.println("open box");
    }
}
【实例 2】相同包访问默认类。
package com.seaboat;
public class ModifierDefaultTest {
    public static void main(String[] args) {
        Box box = new Box();
        System.out.println(box.name);
        box.open();
    }
}
【实例 3】不同包访问默认类。
package com.seaboat.test;
import com.seaboat.Box;
//不能访问Box
public class ModifierDefaultTest {
    public static void main(String[] args) {
        Box box = new Box();
        System.out.println(box.name);
        box.open();
    }
}
在 com.seaboat 包下创建 Box 类,该类及其所包含的变量和方法都为默认的。在 com.seaboat 包下创建一个 ModifierDefaultTest 类,由于是在相同包下,因此它可以访问 Box 类。但如果 ModifierDefaultTest 类创建在 com.seaboat.test 包下则无法访问 Box 类,编译时会报“The type com.seaboat.Box is not visible”的错误。Java protected访问修饰符
protected表示受保护的,被它声明的元素(变量或方法)可以被相同包下的其他类访问,也可以被不同包下的子类访问。注意,该修饰符同样不能用于修饰类和接口。【实例 4】protected 修饰符。
package com.seaboat;
public class Ball {
    protected String name = "ball";
    protected void play() {
        System.out.println("play ball");
    }
}
【实例 5】访问 protected 属性及方法。
package com.seaboat.test;
import com.seaboat.Ball;
public class ModifierProtectedTest extends Ball {
    public static void main(String[] args) {
        ModifierProtectedTest ball = new ModifierProtectedTest();
        System.out.println(ball.name);
        ball.play();
    }
}
观察上面两个实例程序,我们在 com.seaboat 包下创建了一个 Ball 类,该类中的变量和方法都被声明为 protected。然后在 com.seaboat.test 包下创建一个 Ball 类的子类 ModifierProtectedTest,那么在该类中是可以访问 Ball 类中的属性和方法的,尽管它们不在同一个包中。Java public访问修饰符
public表示公有的,被它声明的元素(类、接口、变量或方法)可以被所有类访问。【实例 6】 public 修饰符。
package com.seaboat;
public class Car {
    public String name = "car";
    public void drive() {
        System.out.println("driving car");
    }
}
【实例 7】 访问 public 属性及方法。
package com.seaboat.test;
import com.seaboat.Car;
public class ModifierPublicTest {
    public static void main(String[] args) {
        Car car = new Car();
        System.out.println(car.name);
        car.drive();
    }
}
观察上面两个实例程序,我们在 com.seaboat 包下创建一个 public 的 Car 类,把该类的变量和方法都声明为 public,那么在任意包下的任意类都可以访问该类的变量和方法。在了解了 Java 中的 4 种访问修饰符后,我们来总结一下访问修饰符的作用。
从字面上理解,修饰符的作用就是用于控制访问。对于某些私有的数据,需要通过访问控制来防止不正当的数据操作。从类的角度来看,通过对数据和方法的访问控制可以实现封装性,该类就好比是一个黑箱供开发者使用,而其内部的具体实现则禁止被随意修改。
 
	 ICP备案:
 ICP备案: 公安联网备案:
 公安联网备案: