Java 封装
在本教程中,您将借助示例学习Java中的封装和数据隐藏。
Java 封装
封装是面向对象编程的重要功能之一。封装是指将字段和方法绑定在单个类中。
将类中的类似字段和方法捆绑在一起也有助于隐藏数据。
封装字段和方法
通常,封装是将类似代码包装在一个地方的过程。
在Java中,我们可以将在单个类中一起操作的字段和方法捆绑在一起。例如,
classRectangle{intlength;intbreadth;publicvoidgetArea(){}}
在上面的程序中,getArea()方法计算矩形的面积。为了计算面积,它需要长度(length)和宽度(breadth)。因此,数据字段length、breadth和方法getArea()被放在Rectangle类中。
Java 数据隐藏
数据隐藏是一种通过隐藏实现细节来限制数据成员访问的方法。
封装还提供了一种隐藏数据的方法。
数据隐藏可以通过访问修饰符来实现。在Java中,有四个访问修饰符:
public - 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
private - 修饰的属性或方法是私有的,不能在声明它的类的外部访问
protected - 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的
default - 即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
要了解更多信息,请访问Java 修饰符。
示例1:使用 private 数据隐藏classPerson{privateintage;publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}classMain{publicstaticvoidmain(String[]args){Personp1=newPerson();p1.setAge(24);System.out.println("我的年龄是"+p1.getAge());}}
输出结果
我的年龄是24
在上面的实例中,我们有一个private字段age。因为它是私有的,所以不能从类外部访问它。为了访问age,我们使用了公共方法getAge()和setAge()。这些方法称为getter和setter方法。
如果尝试从Main类中访问age字段,则会出现错误消息。
p1.age=24;//error:agehasprivateaccessinPerson
将age设置为私有,可以限制来自类外部未经授权的访问。这是数据隐藏。
示例2:使用 protected 数据隐藏
classPerson{protectedStringprofession;protectedvoiddisplayInfo(){System.out.println("Iama"+profession);}}classTeacherextendsPerson{publicstaticvoidmain(String[]args){Teachert1=newTeacher();t1.profession="teacher";t1.displayInfo();}}
输出结果
Iamateacher
在上面的程序中,我们创建了一个Person类,其中包含protected字段 profession 和protected方法displayInfo()。
我们已经从Teacher类(Person的子类)访问了这些成员。
为什么要封装?
在Java中,封装可帮助我们将相关的字段和方法保持在一起,从而使我们的代码更整洁且易于阅读。
它有助于控制我们数据字段的修改。 考虑一种情况,我们希望类中的age字段为非负数。 在这里,我们可以将age设为私有,并可以在setAge()方法内部应用逻辑。 例如,
classPerson{privateintage;publicvoidsetAge(intage){if(age>=0){this.age=age;}}}
getter和setter方法提供对我们的类字段的只读或只写访问。例如,
getName()//提供只读访问setName()//提供只写访问
它有助于解耦系统的组件。这些解耦的组件可以独立且同时进行开发,测试和调试。并且,特定组件的任何更改都不会对其他组件产生任何影响。
数据隐藏 与 封装
人们通常认为封装是数据隐藏,但这并不完全正确。
封装是指将相关字段和方法捆绑在一起。这使得我们能够实现数据隐藏。封装本身并不是数据隐藏。