linkin大话面向对象--封装和隐藏

  • 软件开发追求的境界:高内聚,低耦合

高内聚:尽可能把模块的内部数据,功能实现细节隐藏在模块内部独立完成,不允许外部直接干预

低耦合:仅暴露少量的方法给外部使用


  • 到底为什么要对一个雷或者对象实现良好的封装,可以实现以下目的:
1,隐藏类的实现细节
2,让使用者只能通过实现预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问
3,还可以进行数据检查,有利于保证对象信息的完整性
4,便于修改,提高代码的可维护性



  • 为了实现良好的封装,需要从2个方面来考虑
1,把对象的属性和实现细节隐藏起来,不允许外部直接访问
2,把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作

去餐馆吃饭,我们只要能吃到菜就OK了,至于这个厨师长啥样,单眼皮还是双眼皮,怎么做的菜,用了什么牌子的地沟油,我们都没必要知道。我们使用的电脑其实就是体现了封装的思想,它里面什么网卡,声卡是怎么插放的,怎么设计的,我们不要知道,我们只需打开电脑就可以用了。这就如同找一个人来修电脑,只需要知道修好了还是没修好。至于他怎么修的可以不用了解。可是封装好了,外界怎么使用呢?(向外暴露一些简单的入口,供使用)         方法是类中最小的封装体。那么类也一样是一种封装形式,有写方法需要暴露出去,有些就不用。


  • 访问权限控制: 

private:本类内部可以访问,不能继承到子类

default:本类内部可以访问,同包其他类也可以访问。同包可继承

protected:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。能继承到子类

public:任何地方都可以访问  ,能继承到子类


以下图片整理的很好:


修饰符

类内部

同一个包

子类

任何地方

private

default

protected

public



  • 关于访问控制符的使用,存在以下原则:

1,类中的绝大部门属性都应该使用private修饰,只有一些static修饰的,类似全局变量的属性,才使用public
2,如果某个类主要用作其他类的父类,那么应该使用protected来修饰这个类的方法
3,希望暴露给其他类调用的方法使用public来修饰

注意了:如果一个java源文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类的类名相同


  • JavaBean规范:

一个类必须有一个参数为空的构造方法,所有的字段必须使用private修饰;并向外提供getter/setter。

若字段的第二个字母是小写的,把第一个字母变成大的,再加上get/set作为前缀(最常见的)。

若第二个字母是大写的,就保持原样再加上get/set(特殊)。

注意了:boolean 类型的变量没有getXX,只有 isXX;



以下是一个标准的javabean,代码如下:

/**
 *
 * @version 1L
 * @author  LinkinPark 
 * @since   2014-10-27
 * @motto   梦似烟花心似水,同学少年不言情
 * @desc    ^封装实际上就是2个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来
 */
public class JavaBean {
    //使用private修饰,将这些属性隐藏起来,要是想修改这个类的属性,提供get和set方法
    private String name;
    private int age;
    
    public JavaBean(){
        
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        //在这里还可以加入自己的逻辑判断
        if("LinkinPark".equals(name)){
            System.out.println("不可以的,林肯公园是偶的名字,不能随便拿来赋值");
            return;
        }else{
            this.name = name;
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //保证自己写的类的属性不要出现与实际情况不符的情况
        if(age>100 || age<0){
            System.out.println("");
        }else{
            this.age = age;
        }
    }
    
    

}






转载于:https://www.cnblogs.com/LinkinPark/p/5233169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值