java封装
封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别
这样做有什么好处?
只能通过规定的方法访问数据
隐藏类的实例细节,方便修改和实现。
我们在开汽车的时候,只用去关注如何开车,我们并不在意车子是如何实现的,这就是封装。
如何去实现类的封装呢?
1修改属性的可见性,在属性的前面添加修饰符(private)
2对每个值属性提供对外的公共方法访问,如创建 getter/setter(取值和赋值) 方法,用于对私有属性的访问
3在 getter/setter 方法里加入属性的控制语句,例如我们可以加一个判断语句,对于非法输入给予否定。
如果我们没有在属性前面添加任何修饰符,我们通过对象就可以直接对属性值进行修改,没有体现封装的特性。这在许多程序设计中都是不安全的,所以我们需要利用封装,来改进我们的代码。
首先在类里要将属性前添加private修饰符。然后定义getter和setter方法。修改 People.java 和 NewObject.java 的内容如下。
public class People { //属性(成员变量)有什么,前面添加了访问修饰符private //变成了私有属性,必须通过方法调用 private double height; //身高 //属性已经封装好了,如果用户需要调用属性 //必须用getter和setter方法进行调用 //getter和setter方法需要程序员自己定义 public double getHeight(){ //getter 方法命名是get关键字加属性名(属性名首字母大写) //getter 方法一般是为了得到属性值 return height; } //同理设置我们的setter方法 //setter 方法命名是set关键字加属性名(首字母大写) //setter 方法一般是给属性值赋值,所以有一个参数 public void setHeight(double newHeight){ height = newHeight; } }
现在 main 函数里的对象,不能再直接调用属性了,只能通过getter和setter方法进行调用。
public static void main(String[] args) { People LiLei = new People(); //创建了一个People对象LiLei //利用setter方法为属性赋值 LiLei.setHeight(170.0); //利用getter方法取属性值 System.out.println("LiLei的身高是"+LiLei.getHeight()); } }