zoukankan      html  css  js  c++  java
  • 类和对象系列教材 (八)- Java的四种访问修饰符

    成员变量有四种修饰符
    private 私有的
    package/friendly/default 不写
    protected 受保护的
    public 公共的

    比如public 表示公共的
    public String name;

    而maxHP 没有修饰符即代表package/friendly/default
    float maxHP
    步骤1:类之间的关系
    步骤2:private 私有的
    步骤3:package/friendly/default 不写
    步骤4:protected 受保护的
    步骤5:public 公共的
    步骤6:总结
    步骤7:那么什么情况该用什么修饰符呢?
    示例 1 : 类之间的关系
    类和类之间的关系有如下几种:
    以Hero为例
    自身:指的是Hero自己
    同包子类:ADHero这个类是Hero的子类,并且和Hero处于同一个包下
    不同包子类:Support这个类是Hero的子类,但是在另一个包下
    同包类: GiantDragon 这个类和Hero是同一个包,但是彼此没有继承关系
    其他类:Item这个类,在不同包,也没有继承关系的类
    类之间的关系
    示例 2 : private 私有的
    使用private修饰属性
    自身:是可以访问的
    同包子类:不能继承
    不同包子类:不能继承
    同包类:不能访问
    其他包类:不能访问

    注: 红色字体,表示不可行
    private 私有的
    package charactor;
     
    import property.Weapon;
     
    public class Hero {
     
        //属性id是private的,只有Hero自己可以访问
        //子类不能继承
        //其他类也不能访问
        private int id;
         
        String name;
     
        float hp;
     
        float armor;
     
        int moveSpeed;
     
        public void equip(Weapon w) {
     
        }
     
    }
    示例 3 : package/friendly/default 不写
    没有修饰符即代表package/friendly/default 
    float maxHP; 血量上限
    package/friendly/default 不写
    package charactor;
     
    import property.Weapon;
     
    public class Hero {
        private int id;
     
        String name;
     
        // 无修饰符的属性 hp
        // 自己可以访问
     
        // 同包子类可以继承
        // 不同包子类不能继承
     
        // 同包类可以访问
        // 不同包类不能访问
        float hp;
     
        float armor;
     
        int moveSpeed;
     
        public void equip(Weapon w) {
     
        }
     
    }
    示例 4 : protected 受保护的
    受保护的修饰符
    protected float hp; 血量
    protected 受保护的
    package charactor;
     
    import property.Weapon;
     
    public class Hero {
        private int id;
     
        String name;
     
        // protected饰符的属性 hp
        // 自己可以访问
     
        // 同包子类可以继承
        // 不同包子类可以继承
     
        // 同包类可以访问
        // 不同包类不能访问
        protected float hp;
     
        float armor;
     
        int moveSpeed;
     
        public void equip(Weapon w) {
     
        }
     
    }
    示例 5 : public 公共的
    公共的修饰符 
    public String name; 姓名 
    任何地方,都可以访问
    public 公共的
    package charactor;
     
    import property.Weapon;
     
    public class Hero {
        private int id;
     
        // public的属性 name
        // 自己可以访问
     
        // 同包子类可以继承
        // 不同包子类可以继承
     
        // 同包类可以访问
        // 不同包类可以访问
        public String name;
     
        protected float hp;
     
        float armor;
     
        int moveSpeed;
     
        public void equip(Weapon w) {
     
        }
     
    }
    示例 6 : 总结
    总结
    示例 7 : 那么什么情况该用什么修饰符呢?
    那么什么情况该用什么修饰符呢?
    从作用域来看,public能够使用所有的情况。 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢?

    1. 属性通常使用private封装起来
    2. 方法一般使用public用于被调用
    3. 会被子类继承的方法,通常使用protected
    4. package用的不多,一般新手会用package,因为还不知道有修饰符这个东西

    再就是作用范围最小原则
    简单说,能用private就用private,不行就放大一级,用package,再不行就用protected,最后用public。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了
  • 相关阅读:
    给router-link 标签添加事件@click 、@mouseover等无效
    elementUI的导航栏在刷新页面的时候选中状态消失的解决
    查看mysql数据库中的所有用户
    已经安装了客户端,但是cmd输入sqlcmd报错:Sqlcmd:Error:Connection failure.SQL Native Client is not installed correctly
    在运行bat文件时,报错发生系统错误123,文件名,目录名或卷标语法不正确
    数据库表空间文件被删除后,再删除表空间时报错
    oracle在exp导出时报错PLS-00201: identifier 'EXFSYS.DBMS_EXPFIL_DEPASEXP' must be declared
    oracle compile 编译无效对象
    Oracle 导出错误 EXP-00000~EXP-00107
    修改oralce数据库用户名和密码
  • 原文地址:https://www.cnblogs.com/Lanht/p/12441317.html
Copyright © 2011-2022 走看看