封装得关键在于:一个类不允许直接修改另一个类的实例域,程序仅仅通过对象的方法与对象数据进行交互
/** * Created by Administrator on 2017/12/4. */ public class Person { public String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; }
}
** * Created by Administrator on 2017/12/4. * 声明一个学生对象,包含私有的属性name和age * 对外提供get set方法来获取与设置对象的属性 * * 对象包含属性与方法:属性是定义此对象的状态,方法是用来改变对象的状态的 * * private修饰变量代表此属性私有化,只有类中可以访问,类外事无法直接访问的 * 这样就保护了直接修改变量,只能通过方法来进行访问与修改,但是如果说类中的属性 * 不需要外界修改,那么完全可以不提供get,set方法,达到保护的目的 * */ public class Student { private String name;//成员变量 private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
** *对象封装的意义:属性私有化,对象只向外暴露修改属性的方法,而不直接向外暴露属性 * 这样可以控制属性的访问 * * 如果属性私有化,那么如果不想外部修改某个属性的状态,那么可以直接不提供此属性的修改方法 * * 并且在修改或者获取属性时,还可以对方法进行统一的管理,例如:已经过了一年,那么所有人年龄都会 * 加一岁,那么在获取年龄的时候,就可以向如下的get方法写,所有在获取年龄的时候都会+1 * public int getAge() { * return age+1; * } */ public class base01 { public static void main(String[] args) { /** * 使用new 关键字创建对象,所有的对象都继承object类,如果类中没有显示的定义 * 构造函数,那么会调用object的无参构造函数创建对象 */ Student s=new Student(); //为student的age和name进行set赋值 s.setAge(12); s.setName("xiaohei"); String name=s.getName(); int age=s.getAge(); System.out.println(name);//xiaohei System.out.println(age);//12 System.out.println("----------------------"); /** * Person类定义了:public修饰的name属性,private修饰的age属性 * 并且显示的定义了构造函数,如下 */ //此时编译不通过,因为已经显示的提供了有参的构造函数,那么久不能调用父类Object中的无参构造函数了 //Person p=new Person(); //此时直接创建了一个对象,并且name等于xiaohei,age=12 Person p=new Person("xiaohei",12); //由于name属性是public修饰,所以可以随意的利用object.filed进行访问与修改,如下: p.name="laowang"; System.out.println(p.name);//laowang 直接可以进行修改 //此种方式编译无法通过,因为此属性是私有化的,无法直接访问 //p.age=12; } }