在类之中的组成就是属性与方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而对于属性由于其需要较高的安全性,所以往往需要对其进行保护,这个时候就需要采用封装性对属性进行保护。
在默认的情况下,对于类中的属性是可以通过其它类利用对象进行调用的。
范例:属性不封装情况下的问题
class Person { //定义一个类
String name ; //人员的姓名
int age ; //人的年龄
public void tell() {
System.out.println("姓名: " + name + "、年龄: " + age) ;
}
}
public class JavaDemo { //主类
public static void main(String args[]) {
Person per = new Person() ; //声明并实例化对象
per.name = "张三"; //在类外部修改属性
per.age = -18 ; //在类外部修改属性
per.tell(); //进行方法的调用
}
}
此时在person类中提供的name与age两个属性没有进行封装处理,这样外部就可以直接进行调用了,但是有可能设置的数据是错误的数据。如果要想解决这样的问题就可以利用private关键字对属性进行封装处理。
范例:对属性进行封装
class Person { //定义一个类
private String name ; //人员的姓名
private int age ; //人的年龄
public void tell() {
System.out.println("姓名: " + name + "、年龄: " + age) ;
}
}
而属性一旦封装之后外部将不能够直接访问,即:对外部不可见,但是对类的内部是可见的,那么如果要想让外部可以访问属性,则在java开发标准中提供有如下要求:
1.[setter、getter]设置或取得属性可以使用setXxx()、getXxx()方法,以:private String name为例:
设置属性方法:public void setName(String n):
获取属性方法:public String getName():
范例:实现封装
class Person { //定义一个类
private String name ; //人员的姓名
private int age ; //人的年龄
public void tell() {
System.out.println("姓名: " + name + "、年龄: " + age) ;
}
public void setName(String n) {
name = n ;
}
public void setAge(int a) {
if (a >= 0) {
age = a ;
}
}
public String getName() {
return name ;
}
public int getAge() {
return age ;
}
}
public class JavaDemo { //主类
public static void main(String args[]) {
Person per = new Person() ; //声明并实例化对象
per.setName("张三");
per.setAge(-18) ; //在类外部修改属性
per.tell(); //进行方法的调用
}
}
在以后进行任何类定义的时候一定要记住,类中的所有属性都必须使用private封装(98%),并且属性如果要进行访问必须要提供有setter、getter方法。