zoukankan      html  css  js  c++  java
  • Java自学-类和对象 访问修饰符

    Java的四种访问修饰符

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

    比如public 表示公共的

    public String name;
    

    而maxHP 没有修饰符即代表package/friendly/default

    float maxHP
    

    示例 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。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/jeddzd/p/11441502.html
Copyright © 2011-2022 走看看