编程自学指南:java程序设计开发,Java 四种访问修饰符,掌握不同访问修饰符对类、属性和方法的访问权限控制,四种访问修饰符的访问权限范围

编程自学指南:java程序设计开发,Java 四种访问修饰符详解

一、课程信息

学习目标

  1. 理解 Java 中四种访问修饰符(publicprivateprotected、默认)的概念和作用。
  2. 掌握不同访问修饰符对类、属性和方法的访问权限控制。
  3. 能够根据实际需求合理使用访问修饰符,提高代码的安全性和可维护性。

课程重点

  1. 四种访问修饰符的访问权限范围。
  2. 不同访问修饰符在类、属性和方法上的应用。

课程难点

  1. 理解 protected 访问修饰符的特殊访问规则。
  2. 合理运用访问修饰符进行类的设计。

二、课程导入

生活中的访问控制实例

在生活中,我们经常会遇到访问控制的场景。比如,家里的客厅是公共区域,任何人(家人、客人)都可以自由进入,这就类似于 public 访问权限;而卧室通常是私人空间,只有主人可以随意进出,其他人未经允许不能进入,这类似于 private 访问权限;小区的花园是受保护的区域,小区内的居民可以自由使用,外来人员需要经过一定的许可才能进入,这类似于 protected 访问权限;自己房间的抽屉,没有明确说明是否可以让其他家庭成员使用,一般默认只有自己使用,这类似于默认访问权限。

编程中的访问控制需求

在 Java 编程中,我们也需要对类、属性和方法的访问进行控制。例如,一个类的某些属性可能不希望被外部类直接访问和修改,以保证数据的安全性;而有些方法可能需要被其他类调用,就需要提供相应的访问权限。Java 提供了四种访问修饰符来满足这些需求。

三、public 访问修饰符

概念

public 是最宽松的访问修饰符,被 public 修饰的类、属性和方法可以被任何类访问,无论这些类是否在同一个包中。

示例代码

// 定义一个公共类
public class PublicClass {
    // 公共属性
    public String publicField = "This is a public field.";

    // 公共方法
    public void publicMethod() {
        System.out.println("This is a public method.");
    }
}

// 另一个类,可在不同包中
public class AccessPublicClass {
    public static void main(String[] args) {
        PublicClass obj = new PublicClass();
        // 访问公共属性
        System.out.println(obj.publicField);
        // 调用公共方法
        obj.publicMethod();
    }
}

使用场景

  • 当一个类、属性或方法需要被其他任何类使用时,通常使用 public 修饰符。例如,Java 标准库中的很多类和方法都是 public 的,方便开发者使用。

四、private 访问修饰符

概念

private 是最严格的访问修饰符,被 private 修饰的属性和方法只能在本类中访问,其他类无法直接访问。

示例代码

class PrivateClass {
    // 私有属性
    private String privateField = "This is a private field.";

    // 私有方法
    private void privateMethod() {
        System.out.println("This is a private method.");
    }

    // 公共方法,用于间接访问私有属性和方法
    public void accessPrivateMembers() {
        System.out.println(privateField);
        privateMethod();
    }
}

public class AccessPrivateClass {
    public static void main(String[] args) {
        PrivateClass obj = new PrivateClass();
        // 不能直接访问私有属性和方法
        // System.out.println(obj.privateField); 
        // obj.privateMethod(); 

        // 通过公共方法间接访问
        obj.accessPrivateMembers();
    }
}

使用场景

  • 当一个属性或方法是类的内部实现细节,不希望被外部类访问时,使用 private 修饰符。例如,类的一些辅助方法或内部状态变量可以使用 private 修饰,以提高类的封装性和安全性。

五、默认访问修饰符

概念

默认访问修饰符是指在定义类、属性或方法时不使用任何访问修饰符。被默认访问修饰符修饰的类、属性和方法只能在同一个包中的其他类访问。

示例代码

// 同一个包中的类
package com.example.package1;

// 默认访问修饰符的类
class DefaultClass {
    // 默认访问修饰符的属性
    String defaultField = "This is a default field.";

    // 默认访问修饰符的方法
    void defaultMethod() {
        System.out.println("This is a default method.");
    }
}

// 同一个包中的另一个类
class AccessDefaultClass {
    public static void main(String[] args) {
        DefaultClass obj = new DefaultClass();
        // 可以访问默认访问修饰符的属性和方法
        System.out.println(obj.defaultField);
        obj.defaultMethod();
    }
}

使用场景

  • 当一个类、属性或方法只需要在同一个包内使用时,可以使用默认访问修饰符。例如,在一个包中实现一组相关的功能,这些功能之间的类和方法可以使用默认访问修饰符进行封装。

六、protected 访问修饰符

概念

protected 访问修饰符的访问权限介于 private 和 public 之间。被 protected 修饰的属性和方法可以在本类、同一个包中的其他类以及不同包中的子类中访问。

示例代码

// 父类,在包 com.example.package2 中
package com.example.package2;

public class ParentClass {
    // 受保护的属性
    protected String protectedField = "This is a protected field.";

    // 受保护的方法
    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

// 同一个包中的类
package com.example.package2;

class SamePackageClass {
    public static void main(String[] args) {
        ParentClass obj = new ParentClass();
        // 可以访问受保护的属性和方法
        System.out.println(obj.protectedField);
        obj.protectedMethod();
    }
}

// 不同包中的子类
package com.example.package3;

import com.example.package2.ParentClass;

class ChildClass extends ParentClass {
    public void accessParentProtectedMembers() {
        // 可以访问受保护的属性和方法
        System.out.println(protectedField);
        protectedMethod();
    }
}

// 不同包中的非子类
package com.example.package3;

import com.example.package2.ParentClass;

class NonChildClass {
    public static void main(String[] args) {
        ParentClass obj = new ParentClass();
        // 不能访问受保护的属性和方法
        // System.out.println(obj.protectedField); 
        // obj.protectedMethod(); 
    }
}

使用场景

  • 当一个属性或方法需要在同一个包内的类以及不同包的子类中使用时,使用 protected 修饰符。例如,在设计一个类库时,一些基础类的部分属性和方法希望子类可以继承和扩展,但又不希望被其他无关类随意访问,就可以使用 protected 修饰符。

七、四种访问修饰符的访问权限总结

访问修饰符本类同一个包中的类不同包中的子类不同包中的非子类
public
protected×
默认××
private×××

八、课堂练习

练习 1

创建一个 BankAccount 类,包含 accountNumber(账号)、balance(余额)属性。将 accountNumber 设为 privatebalance 设为 protected。提供公共的 getAccountNumber 和 deposit 方法,deposit 方法用于向账户存钱。创建一个 SavingsAccount 类继承自 BankAccount 类,在 SavingsAccount 类中创建一个方法,用于访问 balance 属性并输出余额。

练习 2

创建一个 Shape 类,包含一个默认访问修饰符的 draw 方法。在同一个包中创建 Circle 类和 Rectangle 类,分别继承自 Shape 类,并在子类中重写 draw 方法。在 main 方法中创建 Circle 和 Rectangle 对象,调用 draw 方法。

九、课程总结

重点回顾

  1. 四种访问修饰符(publicprivateprotected、默认)的概念和访问权限范围。
  2. 不同访问修饰符在类、属性和方法上的应用场景。

注意事项

  1. 在设计类时,要根据实际需求合理选择访问修饰符,尽量遵循封装原则,将不需要对外暴露的属性和方法设为 private 或默认访问修饰符。
  2. 使用 protected 修饰符时,要注意其特殊的访问规则,确保只有合适的类可以访问受保护的成员。

十、课后作业

作业 1

设计一个 Employee 类,包含 employeeId(员工编号)、name(姓名)、salary(工资)属性。将 employeeId 设为 privatename 设为默认访问修饰符,salary 设为 protected。提供公共的 getEmployeeId 和 setName 方法,以及受保护的 adjustSalary 方法用于调整工资。创建一个 Manager 类继承自 Employee 类,在 Manager 类中创建一个方法,用于调用 adjustSalary 方法调整员工工资。

作业 2

创建一个 Vehicle 类,包含一个 public 的 start 方法和一个 private 的 checkEngine 方法。在 start 方法中调用 checkEngine 方法。创建一个 Car 类继承自 Vehicle 类,在 Car 类中创建一个 main 方法,创建 Car 对象并调用 start 方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值