资讯专栏INFORMATION COLUMN

从实践认识修饰符

shevy / 1370人阅读

摘要:从实践认识修饰符修饰符分类说到修饰符,大家都知道有,说到它们的区别,相信大家脑海会出现一张图。同一个类同包非子类子类不同包非子类是否否否是是否否是是是否是是是是那么怎么从代码层面解释呢,学东西不能停留在理论层面,毕竟只是一份实践的工作。

从实践认识修饰符 1 修饰符分类

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

  同一个类 同包非子类 子类 不同包非子类
private
default
protected
public

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

2 代码展示

本实例访问方法只有两种

创建对象访问,形成组合关系

继承类,形成继承关系

2.1 引入必要的maven

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

 
    junit
    junit
    4.12
    compile
 

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


    org.slf4j
    slf4j-api
    1.7.5


    org.slf4j
    slf4j-simple
    1.6.4

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


    org.projectlombok
    lombok
    1.16.16
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属性字段

公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74398.html

相关文章

  • 正则表达小结与小知识点集锦

    摘要:正则表达式小结创建方式直接量语法创建对象的语法语法属性说明我们写的正则表达式的规则,而则是规则的修饰符,为全局匹配,为区分大小写的匹配,为多行匹配。注意正则表达式,一定要加上修饰符。 背景介绍 这几天,刚来公司,导师安排点任务增加些功能,以便熟悉了开发环境。接到的任务中,有一个环节需要处理一个业务的json数据,具有多级嵌套,我要做的是让使用者可以修改其中的userName。 有两个思...

    Shonim 评论0 收藏0
  • 读懂 SOLID 的「里氏替换」原则

    摘要:什么是里氏替换原则某个对象实例的子类实例应当可以在不影响程序正确性的基础上替换它们。除了在编程语言层面,在前端实际工作中,你可能会听到一个叫作的概念,这个概念我认为也是里氏替换原则的一直延伸。 这是理解SOLID原则,关于里氏替换原则为什么提倡我们面向抽象层编程而不是具体实现层,以及为什么这样可以使代码更具维护性和复用性。 什么是里氏替换原则 Objects should be rep...

    vibiu 评论0 收藏0
  • 深入理解虚拟机之类文件结构

    摘要:对象创建与访问指令虽然类实例和数组都是对象,但虚拟机对类实例和数组的创建和操作使用了不同的字节码指令。异常处理指令在虚拟机中,处理异常语句不是由字节码指令来实现的,而是采用异常表的方式。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见面试题总结 本节常见面试题(推荐带着问题阅读,问题答案在文中都有提到): 简单介绍一下Class类文件结构(常量池主要存放的是...

    张宪坤 评论0 收藏0
  • 重新认识vue之事件阻止冒泡

    摘要:通用解决办法事件冒泡了嘛,那就阻止事件冒泡呗。很完美有没有,这就不用在事件响应逻辑中去处理事件细节了。 冒泡的表现 近期用vue做了一个需求,大概是同一个区域,点击不同位置有不同的响应函数,还有个总的响应函数,好吧,如下图所示: showImg(https://segmentfault.com/img/remote/1460000015852878?w=1962&h=392); 他们的...

    marek 评论0 收藏0
  • 002-读书笔记-Vue官网 认识数据与指令

    摘要:首先把改成的形式这是一段测试文字绑定最后的显示效果如下,如果要看具体的形式,可以在谷歌人员开发工具中自行查看指令的组成部分经过上面的介绍,应该对指令有一个大概的认识,下面就来对指令的每一项进行说明。 这篇笔记主要用来说明 Vue 中数据的定义和指令的一些特性,后续会做更深入的说明。 1.Vue中的data函数 1-1 使用data函数 由于使用的是单文件组件,因此 Vue 组件中的数据...

    hqman 评论0 收藏0

发表评论

0条评论

shevy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<