面向对象的封装性
面向对象的特征一:封装与隐藏
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; }