摘要:从实践认识修饰符修饰符分类说到修饰符,大家都知道有,说到它们的区别,相信大家脑海会出现一张图。同一个类同包非子类子类不同包非子类是否否否是是否否是是是否是是是是那么怎么从代码层面解释呢,学东西不能停留在理论层面,毕竟只是一份实践的工作。
从实践认识修饰符 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。 有两个思...
摘要:什么是里氏替换原则某个对象实例的子类实例应当可以在不影响程序正确性的基础上替换它们。除了在编程语言层面,在前端实际工作中,你可能会听到一个叫作的概念,这个概念我认为也是里氏替换原则的一直延伸。 这是理解SOLID原则,关于里氏替换原则为什么提倡我们面向抽象层编程而不是具体实现层,以及为什么这样可以使代码更具维护性和复用性。 什么是里氏替换原则 Objects should be rep...
摘要:对象创建与访问指令虽然类实例和数组都是对象,但虚拟机对类实例和数组的创建和操作使用了不同的字节码指令。异常处理指令在虚拟机中,处理异常语句不是由字节码指令来实现的,而是采用异常表的方式。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见面试题总结 本节常见面试题(推荐带着问题阅读,问题答案在文中都有提到): 简单介绍一下Class类文件结构(常量池主要存放的是...
摘要:通用解决办法事件冒泡了嘛,那就阻止事件冒泡呗。很完美有没有,这就不用在事件响应逻辑中去处理事件细节了。 冒泡的表现 近期用vue做了一个需求,大概是同一个区域,点击不同位置有不同的响应函数,还有个总的响应函数,好吧,如下图所示: showImg(https://segmentfault.com/img/remote/1460000015852878?w=1962&h=392); 他们的...
摘要:首先把改成的形式这是一段测试文字绑定最后的显示效果如下,如果要看具体的形式,可以在谷歌人员开发工具中自行查看指令的组成部分经过上面的介绍,应该对指令有一个大概的认识,下面就来对指令的每一项进行说明。 这篇笔记主要用来说明 Vue 中数据的定义和指令的一些特性,后续会做更深入的说明。 1.Vue中的data函数 1-1 使用data函数 由于使用的是单文件组件,因此 Vue 组件中的数据...
阅读 647·2023-04-25 17:26
阅读 1657·2021-08-05 09:58
阅读 2061·2019-08-30 13:17
阅读 1058·2019-08-28 17:52
阅读 1169·2019-08-26 18:27
阅读 1508·2019-08-26 14:05
阅读 3740·2019-08-26 14:05
阅读 1805·2019-08-26 10:45
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要