Java的面向对象
03-封装与隐藏的理解
2021-07-01 529 0
简介 理解封装与隐藏,面向对象基础中的基础!
1. 封装与隐藏
为什么需要封装?封装的作用和含义?
我要看电视,按遥控器调解音量大小,切换节目,只需要按遥控器就可以了,不需要了解遥控器的内部实现细节。
我要开车,不需要了解发动机的实现细节
我们程序设计追求“高内聚,低耦合”。
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉
低耦合 : 仅对外暴露少量的方法
隐藏对象内部的复杂性,只对外公开简单的接口。
便于外界调用,从而提高系统的可维护性,减少外部依赖。通俗的说, 把该隐藏的隐藏起来,该暴露的暴露出来。 这就是封装性的设计思想。
2.封装与隐藏的举例
当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。
这里,赋值操作要受到属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。
但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。
(比如:setLegs())同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的(private).
-->此时,针对于属性就体现了封装性。
我们将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值,这只是封装性的体现之一。注意: 这只是封装性的体现之一,不代表全部封装性。
拓展:封装性的体现:① 如上 ② 不对外暴露的私有的方法,提供类内部使用 ③ 单例模式 ...
//AnimalsTest.java package com.ylaihui.oop1; class Animals{ private int legs; public void setLegs(int l){ if(l <= 0 || l % 2 == 1) legs = 0; else legs = l; } public int getLegs(){ return legs; } } public class AnimalsTest { public static void main(String[] args) { Animals a = new Animals(); a.setLegs(-10); //System.out.println(a.legs); // The field Animals.legs is not visible System.out.println(a.getLegs()); } }