版权声明:原创文章,转载请声明原处 https://blog.csdn.net/qq_41723615/article/details/86219119
首先先要来解决一个问题:为什么要有封装?
范例:观察没有封装的代码。
class Book {
String title;
double price;
public void getInfo(){
System.out.println("图书名称:"+title+price);
}
}
public class TestOo{
public static void main(String args[]){
Book bk=null;//声明对象
bk.title="Java开发";//操作属性内容
bk.price=-89.9;
bk.getInfo(); //调用类中的getInfo()方法
}
}
本程序肯先声明并实例化了一个book对象, 然后分别设置属性的内容。但是这个时候读者可以发
现, 此时的代码没有任何语法错误, 却存在业务逻辑上的错误, 肉为没有任何一本书的价钱是负数。造
成这种销误的关键在于没有检查要设置的内容, 就直接将内容赋予了属性, 这样肯定是不合理的。
范例:使用private封装属性。
class Book {
private String title;
private double price;
public Book(String t,double p){
title=t;
setPrice(p);
}
public void setTitle(String t){
title=t;
}
public void setPrice(double p){
if(p>0.0){
price=p;
}
}
public String getTitle(){
return title;
}
private double getPrice(){
return price;
}
public void getInfo(){
System.out.println("图书名称:"+title+price);
}
}
public class TestOo{
public static void main(String args[]){
Book bk=null;//声明对象
bk.title="Java开发";//操作属性内容
bk.price=89.9;
bk.getInfo(); //调用类中的getInfo()方法
}
}
所有在类中定义的属性都要求使用private声
明,如果属性需要被外部所使用, 那么按照要求定义相应的setter、getter方法。下面以String title为
例进行说明。
• setter方法主要是设置内容:public void setTitle(String t), 有参;
• getter方法主要是取得属性内容:publicString getTitle(), 无参。
实际上属性使用private封装后的setter、getter是项目开发中的标准做法。在
本程序中由于Book类提供有getlnfo()方法, 所以就直接利用此方法进行内容的输
出。但是对于Book类的使用还可能出现单独取得属性的情况, 所以getter、setter
必须同时提供。
在setPrice()方法中增加了数据的也正
功能, 但船主样的验证严格来讲并不标准。对于数据的验证部分, 在标准开发中应该由其
他辅助代码完成。而在实际开发中, setter往往是简单的设置数据, getter只是简单的取
得数据而已。