在类之中的组成就是属性与方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而对于属性由于其需要较高的安全性,所以往往需要对其进行保护,这个时候就需要采用封装性对属性进行保护。
在默认的情况下,对于类中的属性是可以通过其它类利用对象进行调用的。
范例:属性不封装情况下的问题
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开发标准中提供有如下要求:
- 【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方法。
网友评论