java三大特性之封装

本文介绍了面向对象编程中的封装概念,探讨了封装如何提高代码的安全性和重用性,并通过Java示例展示了封装的具体应用。

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

封装

封装(英语:Encapsulation)
在面向对象中封装是指隐藏对象的属性和实现的细节,仅对外提供公共访问方式。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  1. 提高数据的安全性(类内部的结构可以自由修改,隐藏信息和实现细节,私有属性都使用private修饰)。
  2. 良好的封装能够减少耦合
  3. 提高了代码的重用性,封装成工具类以后能够减少很多繁琐的步骤

DEMO体现

根据Java的语法,类的属性只有是private时即便是同包的类也无法直接使用该依赖类的私有属性(内部类除外);
因此private是封装的最好修饰方式。

public class Student {  
    public String name ;  
    public int sex ;  
    public int age ;  
}  

我们可以直接调用其属性

Student student = new Student();  
student.age = 30;  
student.name = "张三";  
student.sex = 1; //我们数据中保存的0:女,1:男

System.out.println(student.sex);

显然当我们要输出时输出的是数字,但当写student类的人把该类的属性屏蔽,并不想让你直接操作时,那么你就无法使用该方式操作该类的属性值。
只能通过对方提供的公共方法操作,特别是当我们需要输出性别为实际含义时,这种方式显然会让我们调用的地方增加判断性别的代码。但作为调用者
我们并不想关心你这些细节,我只用调用你的方法,你给我想要的东西就可以了。

public class Student {  

    /* 
     * 对属性的封装 
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 
     */ 
    private  String name ;  
    private  int sex ;  
    private  int age ; 

    public void Student(String name,int sex,int age) {  
        this.name = name;  
        this.sex = sex; 
        this.age = age; 
    }

    public String getSex() {  
        return this.sex==0?"女":"男";  
    }  

    public void setAge(int age) {  
        //转换即可  
        this.age = String.valueOf(age);  
    }  

    /** 省略其他属性的setter、getter **/  
}  

这样调用的地方就很简洁,而不像上方的方法写出很多行

Student student=new Student("zhagn san",1,20);
System.out.println(student.getSex());//直接可以输出:男

到了这里我们确实可以看出,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。
我们在看这个好处:可以对成员变量进行更精确的控制。
调用者可以更专注于接口和结果,而无需关心其具体实现方式,减少对调用者的代码量也就意味着减少了耦合,使调用方和被调用方各自专注于自己的内部实现。
特别是当调用者增多时,可以明显看到代码冗余量的减少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值