黑马程序员——Java 基础:权限

本文详细介绍了Java中的四种访问权限:private、protected、default、public,包括它们的作用、示例及在不同场景下的应用。重点阐述了如何在类中定义私有变量、使用构造函数和getter/setter方法进行访问,以及默认权限下变量和方法的访问规则。同时对比了public和protected关键字修饰的变量、方法和类在其他包中的访问权限差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述
  Java 语言中有四个关键字用于定义变量、函数、类等的权限,分别为 public、protected、default、private,所对应的访问权限依次从大到小。

二、示例和说明
(1)private 关键字定义的权限
  以 private 关键定义的类的成员只能被类中的方法所访问。

// 在类中以 private 定义一个变量,然后定义该变量的访问方法
class Demo {
    private int a;
    // 以构造函数提供访问变量 a 的方法
    Demo (int a) {
        this.a = a;
    }
    // 以 setter 和 getter 方法提供访问 a 的方法
    void SetA (int a) {
        this.a = a;
    }
    int getA () {
        return a;
    }
}
// 在主函数中通过类中提供的方法访问类中的私有变量
class PrivateDemo {
    public static void main (String[] args) {
        Demo d = new demo(4);
        int a = d.getA();
        d.setA(5);
    }
}

  在其他类中必须要通过在 Demo 类中定义的带参数的构造方法或 setter 和 getter 方法才能访问 Demo 类中的私有变量 a。

(3)default 关键字
  default 关键字通常不用书写,没有使用权限关键字定义的变量、函数、类等默认都是以 default 关键字修饰的,在这种情况下,同一个包中其他类都可以通过该类的对象访问该变量或方法,如果该变量或方为静态,也可以通过类名直接访问。

// 在类中定义默认权限的变量和方法,以及静态变量
class Demo {
    int a = 1;
    static int b = 2;
    void show () {
        System.out.println(a+b);
    }
}
// 在主函数通过类名直接访问静态变量,并通过 Demo 类对象访问非静态变量和方法
class DefaultDemo {
    public static void main (String[] args) {
        int b = Demo.b;
        Demo d = new demo();
        int a = d.a;
        d.show();
    }
}

(3) public 和 protected 关键字
  使用 public 关键修饰的变量、方法和类可以被其他包中的类所访问,访问方法与使用 default 关键字修饰情况相同,而使用 protected 关键字修饰的变量、方法和类可以被其他包中的该类的的子类访问,而不能被其他类访问。

// 在包 PackA 中定义两个类,一个用 public 修饰,一个以 protected 修饰
package PackA

public class PubDemo {
    public int a = 0;
    public void show () {
        System.out.println(a);
    }
}

protected class ProDemo {
    protected int b = 1;
    protected void show () {
        System.out.println(b);
    }
}
// 在包 PackB 中的 Demo 类中访问 PackA.PubDemo 类的对象中的成员和变量
package PackB

class Demo {
    public static void main (String[] args) {
        PackA.PubDemo p = new PackA.PubDemo();
        int a = p.a;
        p.show();
    }
}
// 定义一个 PackA.ProDemo 类的子类并重写该类中的方法
class Child extends PackA.ProDemo {
    protected void show () {
        System.out.println("Override");
}

  在上面的代码中,如果 PackA.PubDemo 类中的变量和方法没有 public 关键字,其他包中的类即使能够建立该类的对象,也不能访问类中的变量和方法。而 PackB 包中的 Child 类在继承了 PackA.ProDemo 之后,在重写其方法时,定义的方法的权限必须为 protected 或 public。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值