面向对象的特征一:封装与隐藏
问题:当创建了类的对象以后,如果直接通过“对象.属性”(s.name)的方式对相应的对象属性赋值的话,可能会出现不满足实际情况的意外,我们考虑不然对象来直接作用属性,而是通过“对象.方法”( s.setName() )的形式,来控制对象对属性的访问。实际情况中,对属性的要求就可以通过方法来体现。
举个栗子:
public class TestAnimal { public static void main(String[] args) { Animal a1 = new Animal(); a1.name = "花花"; a1.legs = -4; a1.info(); a1.eat(); } } class Animal { 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); } }
解决的办法:(封装性的思想)① 将类的属性私有化 ②提供公共的方法(setter & getter)来实现调用。
public class TestAnimal { public static void main(String[] args) { Animal a1 = new Animal(); // a1.name = "花花"; // a1.legs = -4; a1.setLegs(4); a1.setName("小花"); a1.getName(); a1.info(); a1.eat(); } } class Animal { 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 String getLegs() { return legs; } public void setName(String n) { name = n; } public String getName() { return name; } }