封装性 1.为什么需要封装 理论上:
1‘高内聚’:类的内部数据操作细节自己完成,不允许外部干涉
2.‘低耦合’:仅暴露少量的方法给外部使用,尽量方便外部调用 通俗讲:把该隐藏的隐藏起来,改暴漏的爆露出来。
2如何实现封装
2.1权限修饰符: Java规定了四种权限修饰,分别是:private(私有的)、缺省、protected(受保护的)、public(公共的)
2.2作用 我们可以使用四种权限修饰来修饰类及类的内部成员。当这些成员被调用时,体现可见性大小。
2.3实际案例
在题目中,给Animal的对象的legs属性赋值,在实际常识中,legs不能为负数,但是如果 直接调用属性legs,是不能加入判断逻辑, >将legs属性私有化(private),禁止在animal类的外部直接调用此属性 >提供legs属性赋值的setLges()方法,在此方法中加入legs赋值的判断逻辑if(legs>=0&&legs%2==0) 将此方法暴漏出去,使得Animal类外部调用此方法,对legs属性赋值 >提供给legs属性获取getLegs()方法,此方法对外暴露。使得在Animal类外部还可以调用此属性的值 2.4四种权限的具体使用 >类:只能使用public、缺省修饰 >内部成员:可以使用4种权限修饰进行修饰 2.54开发中四种权限使用频率的情况 比较高:public、private 比较低:缺省、protected 3.封装性的体现: >场景1:私有化(private)类的属性,提供公共(public)的get和set方法,对此属性进行获取或修改 >场景2:将类中不需要对外暴露的方法设置为private. >场景3:单例模式中,构造器private了,避免在类外部创建实例。(在static后讲)
package Oop.atguigu07_encapsulation; public class AnimalTest { public static void main(String[] args) { Animal a1=new Animal(); a1.name="金蟾"; //因为legs声明为private,是私有的,出了Animal类就不能在调用了 // a1.legs=4; //只能通过setlegs()方法间接对legs属性进行赋值 // a1.setLegs(4); a1.setLegs(4); a1.setLegs(-4); System.out.println("name="+a1.name+",legs="+a1.getLegs()); a1.eat(); } } class Animal{ //属性 String name;//名字 private int legs;//腿的个数 //方法 //设置legs的属性值 public void setLegs(int l){ if(l>=0&&l%2==0){ legs=l; }else{ System.out.println("输入的数据非法"); } } //获取legs的属性值 public int getLegs(){ return legs; } public void eat(){ System.out.println("动物觅食"); } }