zoukankan      html  css  js  c++  java
  • JAVA 基础 / 第二十五课: 类和对象 / JAVA中的包 PACKAGE和四种访问修饰符

    2018-03-14

    一、包: package 把比较接近的类,规划在同一个包下。

    Hero,ADHero 规划在一个包,叫做charactor(角色)
    Item,Weapon规划在另一个包下,叫做 property(道具)
    在最开始的地方声明该类所处于的包名

    package charactor; //在最开始的地方声明该类所处于的包名
    public class Hero {        
        String name; //姓名        
        float hp; //血量        
        float armor; //护甲        
        int moveSpeed; //移动速度     
    }

    使用同一个包下的其他类,直接使用即可;但是要使用其他包下的类,必须import

    package charactor; 
    //Weapon类在其他包里,使用必须进行import
    import property.Weapon;
     
    public class Hero {        
        String name; //姓名        
        float hp; //血量        
        float armor; //护甲        
        int moveSpeed; //移动速度     
        //装备一把武器
        public void equip(Weapon w){}        
    }

    二、成员变量有四种修饰符 。

    private 私有的 
    package/friendly/default 不写 
    protected 受保护的 
    public 公共的 

    1、类之间的关系:

    类和类之间的关系有如下几种,以Hero为例:
    自身:指的是Hero自己
    同包子类:ADHero这个类是Hero的子类,并且和Hero处于同一个包下
    不同包子类:Support这个类是Hero的子类,但是在另一个包下
    同包类: GiantDragon 这个类和Hero是同一个包,但是彼此没有继承关系
    其他类:Item这个类,在不同包,也没有继承关系的类

    2、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 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; 血量

     

    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; 姓名 

    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) { } 
    }

    那么什么情况该用什么修饰符呢?
    从作用域来看,public能够使用所有的情况。 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢?

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

    再就是作用范围最小原则
    简单说,能用private就用private,不行就放大一级,用package,再不行就用protected,最后用public。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了

  • 相关阅读:
    数据表的水平拆分
    高性能网站架构
    文本框内容改变触发事件
    树莓派3B(1)- Raspberry Pi 3B 安装系统并联网
    一年经验Java程序员面经小记
    Windows系统安装总结
    树莓派3B(2)- 配置多个wifi,自动寻找可用网络
    Centos7 Apache实现Http访问SVN资源库
    Centos7搭建svn服务
    读《重构 改善既有代码的设计》有感
  • 原文地址:https://www.cnblogs.com/Parker-YuPeng/p/8564805.html
Copyright © 2011-2022 走看看