为了账号安全,请及时绑定邮箱和手机立即绑定

2.4. 封装与访问控制

标签:
Java

封装(Encapsulation)是面向对象编程的一个核心概念,它意味着将数据(属性)和方法(操作数据的函数)捆绑在一起,形成一个类(Class)。封装的目的是将数据和操作数据的方法隐藏起来,以防止外部对数据的直接访问。这样,我们就可以通过定义公共接口(Public Interface)来控制外部对类的访问,提高代码的可维护性和安全性。

Java 提供了四种访问修饰符(Access Modifier)来实现封装,它们分别是:publicprivateprotected 和不写(默认)。访问修饰符可以修饰类的属性和方法,不同的访问修饰符有不同的访问权限。

  1. public:最高权限,表示该属性或方法可以被任何其他类访问。
  2. private:最低权限,表示该属性或方法只能被其所在的类访问。
  3. protected:较低权限,表示该属性或方法可以被其所在类及其子类和同一包中的其他类访问。
  4. 默认:表示该属性或方法可以被其所在类和同一包中的其他类访问,但不能被子类访问。

让我们通过一个案例来了解这四种访问修饰符。

// 位于包 com.example 的 Person 类
package com.example;

public class Person {
    public String name;        // 公共属性,任何类都可以访问
    private int age;           // 私有属性,只能在 Person 类中访问
    protected String address;  // 受保护属性,可以在 Person 类,同一包中的类和子类中访问
    String phoneNumber;        // 默认属性,可以在 Person 类和同一包中的类访问,但不能被子类访问

    public void sayHello() {   // 公共方法,任何类都可以访问
        System.out.println("Hello! I am " + name);
    }

    private void growUp() {    // 私有方法,只能在 Person 类中访问
        age++;
    }

    protected void changeAddress(String newAddress) { // 受保护方法,可以在 Person 类,同一包中的类和子类中访问
        address = newAddress;
    }

    void updatePhoneNumber(String newNumber) { // 默认方法,可以在 Person 类和同一包中的类访问,但不能被子类访问
        phoneNumber = newNumber;
    }
}
// 位于包 com.example 的 Employee 类
package com.example;

public class Employee extends Person {
    public void work() {
        sayHello();            // 可以访问父类的公共方法 sayHello
        changeAddress("New York"); // 可以访问父类的受保护方法 changeAddress
    }
}
// 位于包 com.other 的 Another 类
package com.other;

import com.example.Person;

public class Another {
    public void test() {
        Person person = new Person();
        person.sayHello();     // 可以访问 Person 类的公共方法 sayHello
    }
}

这个例子中,Person 类有四个属性和四个方法,分别使用了四种不同的访问修饰符。Employee 类继承了 Person 类,可以访问其公共方法和受保护方法。Another 类虽然不在同一包中,但是可以访问 Person 类的公共方法。

当我们设计类时,应该尽量将属性设置为 private,并通过公共方法(如 getter 和 setter)来访问这些属性。这样做可以确保类的实现细节不会泄露给外部,提高代码的可维护性和安全性。

总结一下,封装和访问控制是面向对象编程的核心概念之一。通过使用访问修饰符,我们可以限制类的属性和方法的访问权限,从而保护类的实现细节。理解这些概念并在实际编程中应用它们,可以帮助我们编写更加健壮、可维护的代码。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
2
获赞与收藏
17

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消