面向对象三大特性--封装性

发布时间 2023-10-26 16:29:28作者: 柒酒

​ 封装性 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("动物觅食");
    }
}