如何实现Java的封装

来自CloudWiki
跳转至: 导航搜索

如何实现封装

Java中的封装不是为了做一个完全不能对外开放的类,这种类也没有任何存在意义。封装只是为了对类中的属性更好进行控制,因此要实现封装需要属性私有化,这样可以保证属性不会被其他类改动。然后使用公有方法把私有的属性暴露出去,在方法中对属性进行有效读写控制,也把这些方法称之为访问器。封装的实现需要提供三项内容:

  1. 一个私有的属性(变量),使用private来声明私有变量。例如:
private String name;
  1. 一个公有的读操作访问器,使用getter方法来完成。例如:
public String getName(){  //方法体  }
  1. 一个公有的写操作访问器,使用setter方法来完成。例如:
public void setName(String name){  //方法体  }


【实例3-5】使用封装技术模拟对学生借书的过程,要求学生最多只能借10本书。学生类中只有一个整数型变量count,为书的数量,对count设置时不能大于10,获得count值时不能获得一个负数。

  • 初始代码:

在项目中新建一个类文件:

public class Student {
	private int count;
	public void setCount(int myCount) {
	     count= myCount;
	}
	public int getCount() {
             return count;
        }	
}

在项目中新建MainTest类:

public class MainTest {
	public static void main(String args[]){
		Student s=new Student();
		s.setCount(11);		
                int count=s.getCount();
		System.out.println(“Count的值是:”+count);               
	}
}
  • 改进代码:
public class Student {
	private int count;
	public void setCount(int myCount) {
		if(myCount<0 && myCount>10)
	     	System.out.println("获取错误");
		else
			count= myCount;
	}
	public int getCount() {
		if(count<=0){
		   System.out.println("获取错误");	
                   return 0;
                }else{
                   return count;
                }
	}	
}
public class MainTest {
	public static void main(String args[]){
		Student s=new Student();
		s.setCount(11);
		s.setCount(5);
                int count=s.getCount();
		System.out.println(“Count的值是:”+count);
                s.setCount(0);
                count=s.getCount();
		System.out.println(“Count的值是:”+count);
	}
}

程序运行结果如下:

设置错误
设置错误
Count的值是5
获取错误

【经验】

  • 对于什么时候需要封装,什么时候不用封装,并没有一个明确的规定,不过从程序设计角度来说,设计较好的类属性都是需要封装。要设置或取得属性值,则只能用setXxx()、getXxx()方法。

练习题

  • 完成课本P118页1-3三个习题,将三个类里面的所有成员变量都设为私有变量,并为其增加读方法和写方法。

返回 Java程序设计