zoukankan      html  css  js  c++  java
  • 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;
            }
        }
        
        
    
    }
    






  • 相关阅读:
    Shared Memory in Windows NT
    Layered Memory Management in Win32
    软件项目管理的75条建议
    Load pdbs when you need it
    Stray pointer 野指针
    About the Rebase and Bind operation in the production of software
    About "Serious Error: No RTTI Data"
    Realizing 4 GB of Address Space[MSDN]
    [bbk4397] 第1集 第一章 AMS介绍
    [bbk3204] 第67集 Chapter 17Monitoring and Detecting Lock Contention(00)
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233169.html
Copyright © 2011-2022 走看看