面向对象的封装性


面向对象的特征一:封装与隐藏

package V;

public class TestAnimal {
    public static void main(String[] args) {
        Animla a1=new Animla();
        a1.name="花花";
        a1.legs=-4;//这里赋值应该有限制,腿不应该是负数,赋值有点宽泛
        a1.info();
        a1.eat();
    }
}
class Animla {
    String name;
    int legs;

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

    public void sleep() {
        System.out.println("动物睡觉");
    }

    public void info() {
        System.out.println("name:" + name + " legs:" + legs);
    }

}


问题:当创建了类的对象以后,如果直接通过“对象.属性”的方式对相应的对象属性赋值的话,可能会出现不满实际情况的意外,我们考虑不让独享来直接作用于属性,而是通过“对象.方法”的形式,来控制对象对属性的访问。实际情况中,对属性的要求就可以通过方法来体现
解决办法:
1.

package V;

public class TestAnimal {
    public static void main(String[] args) {
        Animla a1=new Animla();
a1.setLegs(-4);
        a1.setName("小花");
        a1.info();
        a1.eat();
    }
}
class Animla {
    String name;
    int legs;

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

    public void sleep() {
        System.out.println("动物睡觉");
    }

    public void info() {
        System.out.println("name:" + name + " legs:" + legs);
    }

    public void setLegs(int l){
        if (l>0 && l%2==0){
            legs=l;
        }else{
            System.out.println("输入数据有误");
        }
    }
    public void setName(String n){
        name=n;
    }
}


2.private 修饰的属性只能在本类中被调用,出了此类就不能被调用了

package V;

public class TestAnimal {
    public static void main(String[] args) {
        Animla a1=new Animla();
        a1.name="花花";
        a1.legs=-4;//这里赋值应该有限制,腿不应该是负数,赋值有点宽泛
        //a1.setLegs(-4);
        //a1.setName("小花");
        a1.info();
        a1.eat();
    }
}
class Animla {
    //private 修饰的属性只能在本类中被调用,出了此类就不能被调用了
    private String name;
    private int legs;

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

    public void sleep() {
        System.out.println("动物睡觉");
    }

    public void info() {
        System.out.println("name:" + name + " legs:" + legs);
    }

    public void setLegs(int l){
        if (l>0 && l%2==0){
            legs=l;
        }else{
            System.out.println("输入数据有误");
        }
    }
    public void setName(String n){
        name=n;
    }
}


3.封装的思想:(1)将类私有化,(2)提供公共的方法(setter&getter)来实现调用

 public void setLegs(int l){
        if (l>0 && l%2==0){
            legs=l;
        }else{
            System.out.println("输入数据有误");
        }
    }
    public int getLegs(){
        return legs;
    }

 

posted @ 2019-02-28 17:17  T&K  阅读(334)  评论(0编辑  收藏  举报