05.封装性

版权声明:原创文章,转载请声明原处 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只是简单的取
得数据而已。

 

猜你喜欢

转载自blog.csdn.net/qq_41723615/article/details/86219119