4-5面向对象编程(上)----面向对象的特征之一:封装与隐藏(1)

封装与隐藏

一、程序追求“高内聚,低耦合”。
1.高内聚:类的内部数据操作细节自己完成,不允许外部干涉。
2.低耦合:仅对外暴露少量的方法用于使用。
3.隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的涉及思想。

二、问题的引入
当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储范围的制约。除此之外
没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。这个条件不能在属性声明时体现,我们只能通过方法进行限制条件的添加。(比如,setLegs)。
同时,我们需要避免用户再使用“对象.属性”的方式堆属性进行赋值。则需要将属性声明为私有的(private)
—>此时,针对于属性就体现了封装性。

三、封装性的体现:(不等于封装性)
我们将类的属性私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值。
**拓展:**封装性的体现: ① 如上
②不对外暴露的私有的方法 ③ 单例模式……

代码:

public class AnimalTest {
 public static void main(String[] args) {
  Animal a = new Animal();
  a.name = "大黄";
  a.setAge(3);
  System.out.println(a.getAge());
//  a.legs = 4;//The field Animal.legs is not visible
  a.setLegs(6);
  a.show();
//  a.legs = -4;//The field Animal.legs is not visible
  a.setLegs(-2);
  a.show();
  System.out.println(a.name);
 }
}

class Animal {
 String name;
 private int age;
 private int legs;// 腿的个数
 //private---->不能直接调用了,权限小---->封装性、隐藏性

 //对属性的设置
 public void setLegs(int l) {
  if (l >= 0 && l % 2 == 0) {
   legs = l;
  } else {
   legs = 0;// 最好是抛出一个异常,后续会学
  }
 }

 //对属性的获取
 public int getLegs() {
  return legs;
 }

//提供关于属性age的get和set方法
 public int getAge() {
  return age;
 }
 public void setAge(int a) {
  age = a;
 }

public void eat() {
  System.out.println("动物进食");
 }

public void show() {
  System.out.println("name = " + name + ", age = " + age + ", legs = " + legs);
 }
}

输出:

3
name = 大黄, age = 3, legs = 6
name = 大黄, age = 3, legs = 0
大黄
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YY鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值