zoukankan      html  css  js  c++  java
  • 从实践认识修饰符

    从实践认识修饰符

    1 修饰符分类

    说到修饰符,大家都知道有private deafult protect public,说到它们的区别,相信大家脑海会出现一张图。

     |同一个类|同包非子类|子类|不同包非子类
    -|-|-|-
    private|是|否|否|否
    default|是|是|否|否
    protected|是|是|是|否
    public|是|是|是|是

    那么怎么从代码层面解释呢,学东西不能停留在理论层面,毕竟只是一份实践的工作。所以请看下面讲解,毕竟实践才是检验真理的唯一标准,说白了就是写一些demo,验证一下,工作中我们不了解某个方法或者某个类的时候,本人推荐写一些demo,做一些test,本人觉得这是技巧之一。

    2 代码展示

    本实例访问方法只有两种

    1. 创建对象访问,形成组合关系
    2. 继承类,形成继承关系

    2.1 引入必要的maven

    写demo验证自己想法时候,推荐使用test框架,不同每次都写一个main方法,只要一个注解@test就能解决问题

     <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
     </dependency>
    

    也可以使用slf4j框架来打印信息

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.6.4</version>
    </dependency>
    

    也可以使用lombok框架,实现注解@getter和@setter代替getter方法和setter方法

    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.16</version>
    </dependency>
    

    2.2 private

    需要创建对象 调用类中属性

    2.2.1 实例

    package classtest;
    
    import lombok.Getter;
    import lombok.Setter;
    import org.junit.Test;
    
    /**
     * @Author buer
     * @create 2019/4/28 10:06
     * @description 父类
     */
    @Getter@Setter
    public class Animal {
        public int id = 1;
        private String name="chen";
        protected String parent = "parent";
    
        @Test
        public void eat(){
            Animal animal  = new Animal();
            System.out.println(animal.name);
        }
    }
    
    

    2.2.2 结果

    chen

    ps:贴图很麻烦 就贴字了

    2.2.3 结论

    在本类创建对象可以直接访问private属性字段

    2.3 default

    创建对象,访问属性

    2.3.1 实例

    package classtest;
    @Getter
    @Setter
    public class Classtest {
        @Test
        public void defaultTest(){
            Animal animal  = new Animal();
            System.out.println(animal.name);
        }
    }
    

    另一个类name属性改变--》protected

    package classtest;
    @Getter
    @Setter
     public class Animal {
        private int id;
        String name="chen";
        protected String parent;
    
    }
    
    

    2.3.2 结果

    chen

    2.3.3 结论

    在同一个包中创建对象可以直接访问,不同包下创建对象不能访问default 默认属性字段,例子省略

    2.4 protected

    继承父类,不需要创建父类对象,直接访问protected属性字段

    2.4.1 实例

    package butong;
    
    import classtest.Animal;
    import org.junit.Test;
    
    /**
     * @Author buer
     * @create 2019/5/4 14:37
     * @description
     */
    
    
    public class Animalbutong extends Animal{
    
        @Test
        public void defaultTest(){
            System.out.println(parent);
        }
    }
    
    

    2.4.2 结果

    chen

    2.4.3 结论

    在子类中可以直接进访问父类字段,不需要创建对象

    2.5 public

    在不同包以及非子类关系下,创建对象可以访问public属性字段

    2.5.1 实例

    test属性是public

    
    package butong;
    
    import classtest.Animal;
    import org.junit.Test;
    
    /**
     * @Author buer
     * @create 2019/5/4 14:37
     * @description
     */
    
    
    public class Animalbutong {
    
        @Test
        public void defaultTest(){
            Animal animal = new Animal();
            System.out.println(animal.test);
        }
    }
    
    

    2.5.2 结果

    chen

    2.5.3 结论

    在不同包以及非子类关系下,创建对象可以访问public属性字段

  • 相关阅读:
    C基础之移位操作
    实现itoa()
    Python的time模块的clock方法在不同平台的效果不同
    __stdcall与__cdecl之区别浅析及相关知识
    Python 字典 dictionary changed size during iteration
    Windows下printf输出long long类型
    inotify也会爆棚
    一条对“失控的腾讯帝国:企鹅无法把控手机市场”的评论
    imfunny程序员的增量发展
    程序员第一定律:关于技能和收入
  • 原文地址:https://www.cnblogs.com/chenzhuantou/p/10808585.html
Copyright © 2011-2022 走看看