浅谈java中面向对象思想——封装。

 本人最近在学习java,java自己也是一门面向对象的语言,那么先简单来讲说,何为面向对象。
   何为面向对象:编程语言分为面向对象,和面向过程,那么何为面向对象呢,我我的的理解就是,你须要什么,就把相对应用来解决问题的类,拿过来用,而不用本身亲历亲为,对同类对象抽象出其共性,造成类。用这个你抽象出来的类,来解决你要解决事儿。
  面向对象三大特性,封装、继承、多态。java

一.封装数据库

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操做封装在一块儿,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽量地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。其余对象只能经过包裹在数据外面的已经受权的操做来与这个封装的对象进行交流和交互。也就是说用户是没法也无需知道对象内部的细节,但能够经过该对象对外的提供的接口来访问该对象。编程

就封装而言,一个对象它所封装的是本身的属性和方法,因此它是不须要依赖其余对象就能够完成本身的操做。编程语言

       使用封装有三大好处:学习

          一、良好的封装可以减小耦合。this

           二、类内部的结构能够自由修改。code

          三、能够对成员进行更精确的控制。对象

          四、隐藏信息,实现细节。继承

public class Teacher{  
      
    /* 
     * 对属性的封装 
     * 一我的的姓名、性别、年龄、学生都是这个老师的私有属性 
     */  
    private String name ;  
    private String sex ;  
    private int age ;  
    private Student stu;  
      
    /* 
     * setter()、getter()是该对象对外开发的接口 
     */  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
   
    public int getStu() {  
        return stu;  
    }

    public void setStu(Student stu) {  
        this.stu = stu;  
    }
}
public class Student{  
    private String name;  
    private int age;  
    private String sex;  
    private Teacher teacher;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    } 

    public class Wife {  
    private String name;  
    private int age;  
    private String sex;  
    private Husband husband;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setHusband(Husband husband) {  
        this.husband = husband;  
    }  
  
    public Husband getAge() {  
        return husband;  
    }   
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setTeacher(Teacher teacher) {  
        this.teacher = teacher;  
    }  
  
    public Husband getTeacher() {  
        return teacher;  
    }  
      
}

从上面两个类,咱们能够看出,咱们将Teacher类和Student类的属性设置为私有,可是设置了相应的get方法供外界访问,固然若是学生闯祸了,他不想让别人知道他的老师是谁,这样咱们只须要取消getTeacher方法就好。接口

因此封装把一个对象的属性私有化,同时提供一些能够被外界访问的属性的方法,若是不想被外界方法,咱们大可没必要提供方法给外界访问。可是若是一个类没有提供给外界访问的方法,那么这个类也就没有意义了。(都不让用你还封装这个类干吗=。=)

固然,这样可能还没法知道封装的好处,以及封装的意义,那么咱们能够这样。

public class Student{  
    private String name;  
    private int age;  
    private String sex;  
    private Teacher teacher;
}
public class Test{  
   public static void main(String[] args) {
		Student stu1 = new Student();
        stu1.age = 30;   
	}  
}

在上面的代码中,学生类中的age属性是int属性,若是咱们想给它改为String属性怎么办呢?若是只在这一个类里面写了还好,要是在几百个类里都有这个属性,那怎么办呢?

这个时候封装的好处就体现出来了,这个时候只要在Student类里,作一点小的修改就能够了。上代码

/* 
     * 对属性的封装 
     * 一我的的姓名、性别、年龄、老师都是这个学生的私有属性 
     */  
    private String name ;  
    private String sex ;  
    private String age ;    /* 改为 String类型的*/   
      
    public String getAge() {  
        return age;  
    }  
      
    public void setAge(int age) {  
        //转换便可  
        this.age = String.valueOf(age);  
    }  
      
    /** 省略其余属性的setter、getter **/

这个时候只要对,Student的set方法进行一个小的修改就能够了。

其余的地方依然那样引用(stu.setAge(22))保持不变。

       到了这里咱们确实能够看出,封装确实可使咱们容易地修改类的内部实现,而无需修改使用了该类的客户代码

      封装的好处:能够对成员变量进行精确的控制。

封装还能够在类的内部对一些属性进行一些严谨的限制操做,好比性别这个属性,咱们通常在数据库中用1或0方式来存储,只有男女,若是出现其余的......

public String getSexName() {  
        if("0".equals(sex)){  
            sexName = "女";  
        }  
        else if("1".equals(sex)){  
            sexName = "男";  
        }  
        else{  
            sexName = "???";  
        }  
        return sexName;  
    }

同理,名字,年龄,咱们均可以作一些相似的操做,或者在set方法里作一些限制,这里就不一一赘述了。

以上纯属我的观点和理解,欢迎补充和指正,谢谢。请各位大大关注后续的一些博客,下一篇《继承》。

相关文章
相关标签/搜索