Java三大特性详解--封装

news/2024/7/7 10:02:32

本人也是刚刚入职java开发的小白,在实际工作中和在学校用到的东西还是有很多不一样的,虽然我是科班出身,但是还是深感自己基础不牢啊,可谓基础不牢,地动山摇,在工作中往往一个简单的bug找到吐血,还是对语言的理解不深,所以决定把自己的基础重新补一补。
今天来说一说java 最典型的三大特性,封装,继承和多态。
封装:个人的理解是就是把一个对象的所有属性都放在一个封装类A里面,在使用这个对象的属性时,通过调用封装类A的get和set方法对属性进行操作。

他们解释:封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象。
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。

使用封装有三大好处:

  1. 良好的封装能够减少耦合。
  2. 类内部的结构可以自由修改。
  3. 可以对成员进行更精确的控制。
  4. 隐藏信息,

接下来看一下例子,PersonPO.java, ParentsPO.java

package com.po;

public class PersonPO {
    /**
     * 姓名
     */
    private String name;
    /**
     * 性别
     */
    private String sex;
    /**
     * 年龄
     */
    private int age;
    /**
     * 父母
     */
    private ParentsPO parentsPO;
    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 ParentsPO getParentsPO() {
        return parentsPO;
    }
    public void setParentsPO(ParentsPO parentsPO) {
        this.parentsPO = parentsPO;
    }   
}

上面是personPO.java 类,用来封装好了人这个对象的一些属性,这里顺带提一下,在公中代码的编写习惯很重要,做好做到规范,一般在封装类中的属性都要写注释并且使用/**注释*/这种,只有在方法体中的注释才是 //注释。关于java编写规范的问题我自己还没有整理,不过网上就有很多,自己多注意一下吧,下面这个这个链接就是java规范的问题:http://www.cnblogs.com/foreverly/articles/6581198.html

package com.po;

public class ParentsPO {

    private String name;
    private String age;
    private String idCard;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(String age) {
        this.age = age;
    }
    public String getIdCard() {
        return idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
}

可以看到在parentsPO.java中没有getage()方法,所以外界便不能获得parentsPO对象的age的属性值了
所以封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。比如我们将一个房子看做是一个对象,里面的漂亮的装饰,如沙发、电视剧、空调、茶桌等等都是该房子的私有属性,但是如果我们没有那些墙遮挡,是不是别人就会一览无余呢?没有一点儿隐私!就是存在那个遮挡的墙,我们既能够有自己的隐私而且我们可以随意的更改里面的摆设而不会影响到其他的。但是如果没有门窗,一个包裹的严严实实的黑盒子,又有什么存在的意义呢?所以通过门窗别人也能够看到里面的风景。所以说门窗就是房子对象留给外界访问的接口。

接下来说再来看,如果有一天想要把PersonPO.java中的age属性类型该成string类型,如果是小项目或是开发刚刚起步还好,但如果是一个大的系统,很多地方都用到了这个对象,你现在改一下这个对象的属性类型,那么就有成千上万个地方等着你改。所以这个时候你着用改一下set 方法

package com.po;

public class PersonPO {
    /**
     * 姓名
     */
    private String name;
    /**
     * 性别
     */
    private String sex;
    /**
     * 年龄改成String类型
     */
    private String age;
    /**
     * 父母
     */
    private ParentsPO parentsPO;
    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 String getAge() {
        return age;
    }
    public void setAge(int age) {       
        if(age > 120){  
            System.out.println("ERROR:error age input....");    
            //提示錯誤信息  
        }else{  
            this.age = String.valueOf(age);   
        }  
    }
    public ParentsPO getParentsPO() {
        return parentsPO;
    }
    public void setParentsPO(ParentsPO parentsPO) {
        this.parentsPO = parentsPO;
    }
}

通过上面的例子,我想说的是,其实在封装类中的get和set 方法是可以操作的,因为我们往往在编写项目的过程中,在创建对象类的时候,只是把对象类的属性写好,然后依靠编译器自动生成get 和set方法,从而忽略有些时候修改get和set 方法能更轻松的解决问题。


http://www.niftyadmin.cn/n/647541.html

相关文章

利用阿里大于(大鱼)平台进行发送手机验证码

昨天看了一篇博文利用阿里云大于平台给手机发送验证码和短信,当时自己就很感兴趣,因为这个技术很有用,相当于以后做用户注册的功能可以进行短信验证,并且大于平台的短信收费也很低,我自己都没有花钱。现在来分享一下我…

Description Resource Path Location Type Project configuration is not up-to-d

右键项目,【Maven】—》【Update Project Configuration…】 搞定 欢迎大家关注个人公众号 分享各种学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,仅供学习交流和分享,不涉及任何商业用途。…

java生成一维码和二维码

这两天想了解一下二维码是怎样生成的。然后在网上看了很多资料,也有很多源码可以直接用的。我也没有自己写,也是拿着源码进行看和修改的,然后生成自己想要的二维码和一维码,还是很不错的,所以分享一下。 首先第一步&a…

PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置

转载于:https://www.cnblogs.com/zhanghaiyang/p/7212840.html

spring-bean的理解

我们使用Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”。 Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行…

双十一的一些技术思考

今天是双十一,人们记得知道更多的是购物狂欢的日子。阿里巴巴能撑起全球同一时间那么大的交易额,本人还是小白,高深的不懂,谈谈我的理解。 首先我想到的是,淘宝网在双十一这天会同时有千万级的访问量,阿里…

用户人品预测大赛--就是gan队--竞赛分享

用户人品预测大赛--就是gan队--竞赛分享 DataCastle运营 发表于 2016-3-24 14:14:05 1194 1 0答辩PPT