首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(16) 继承细节

上节我们介绍继承和多态基本概念,基本概念是比较简单,子类继承父类,自动拥有父类属性和行为,并可扩展属性和行为,同时,重写父类方法以修改行为。...这个时候,它任何子类都必须在构造方法中通过super(...)调用Base带参数构造方法,如下所示,否则,Java会提示编译错误。...可以看出,当有多个重名函数时候,在决定要调用哪个函数过程中,首先是按照参数类型进行匹配,换句话说,寻找在所有重载版本中最匹配,然后才看变量动态类型,进行动态绑定。...,因为b动态类型就是Child,但下面代码是不行: Base b = new Base(); Child c = (Child)b; 语法上Java不会报错,但运行时会抛出错误错误为类型转换异常...test(){ System.out.println("不能被重写"); } } 小结 本节我们讨论Java继承概念引入一些细节,有些细节可能平时遇到比较少,但我们还是需要对它们有一个比较了解

66290

06 Java 继承

继承 Java 继承实现(只支持类单继承,不支持类多继承,但是支持接口多实现)。 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类....编译器检查 @Override 注解方法在父类中已定义方法是否匹配,如果匹配则会报错。 方法覆盖时应遵循原则 覆盖后方法不能比原方法有更严格访问控制(可以相同)。...当有多个重名函数时候,在决定要调用哪个函数过程中,首先是按照参数类型进行匹配,换句话说,寻找在所有重载版本中最匹配,然后才看变量动态类型,进行动态绑定。...使用组合,子类就不需要关注基类是如何实现,基类修改实现细节,增加公开方法,也不会影响到子类。 多态性 父类或者接口引用指向或者接收自己子类对象叫多态 。...实际执行调用是子类实现,这叫动态绑定。 作用:多态存在提高了程序扩展性和后期可维护性. 发生多态要有三个前提条件: 继承。多态发生一定要子类和父类之间。 覆盖。子类覆盖了父类方法。

50820
您找到你想要的搜索结果了吗?
是的
没有找到

Java--泛型程序设计语法

,"Public"); 类型变量限定: 有时候,类或方法需要对类型变量进行约束。如我们要实现一个泛型比较方法,那么只有实现Comparable接口类才可以进行比较。...现在,泛型min()方法只能被实现Comparable接口数组调用,否则会产生一个编译错误。...表示T应该是绑定类型子类型,T和绑定类型可以是类,也可以是接口。...但要当心转换后可能会产生类型错误(类型匹配但不会报错),例如: Pair managerBuddies = new Pair(ceo,cfo); Pair rawBuddies...= managerBuddies; rawBuddies.setFirst(new File("huo");//很明显类型错误,但只会得到一个警告而不是错误 泛型类可以扩展或实现其他泛型类,这一点和普通类没有任何区别

63190

Java 新特性前瞻:封印类

通过解耦访问性和扩展性,封印类有助于创建安全继承结构,让程序库开发人员既可以公开接口,又能够控制所有的实现。 封印类与记录类和模式匹配一起,为以数据为中心编程模式提供支持。...Java SE 15(即将于 2020 年 9 月发布)引入封印类作为预览特性。封印类和接口扩展它们子类型具有更多控制权, 这对于一般领域建模和构建更安全平台库来说都是很有用。...任何其他尝试扩展 Shape 类或接口都将收到编译错误(如果你试图通过其他方式生成 Shape 子类,会在运行时出现错误)。...有封印接口,程序库作者不需要再纠结是使用多态性、是允许不受控制扩展还是将抽象公开为接口——他们可以同时拥有这三种技术。作者可能会选择让实现类访问,但更有可能让实现类保持封装性。...封印类允许程序库作者将可访问性与扩展性解耦。这种灵活性很好,但我们应该在什么时候使用呢?当然,我们希望将 List 变成封印接口,因为对于用户来说,创建新类型 List 是完全合理和可取

56910

JAVA语言特征及核心

1、Java语言特点 Java应用广泛,受到大众欢迎,其根本原因是Java语言众多突出优点(优点肯定是与其他高级语言相比较得来) 下面我们介绍几个主要特点: 1.1、简单 Java看起来设计很像...为了简单起见,只支持类之间单继承,但支持接口之间多继承,并支持类与接口之间实现机制(关键字implements)。Java语言全面支持动态绑定,而C++语言只对函数使用动态绑定。...Java还包括一个类扩展集合,分别组成各种程序包(package),用户可以在自己程序中使用。...Java消除了某些编程错误,使得用它写可靠软件相当容易。 Java是一个强类型语言,它允许扩展编译时检查潜在类型匹配问题功能。Java要求显示方法声明,它不支持C语言风格隐式声明。...Java环境本身对新硬件平台和操作系统是移植Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。

48020

【基础系列】ConfigurationProperties 配置绑定中那些你不知道事情

不知是否有想过 @ConfigurationPorperties修饰类如何生效 配置参数与定义 POJO 类型匹配时会怎样 配置参数必要性校验可以怎么支持 自定义配置参数,idea 中如何自动补全...Setter 方法,上文中主要是借助 lombok @Data省略 Setter 方法显示声明而已 类属性名与配置文件中配置名要求匹配 大小写不敏感 支持下划线转驼峰 配置类不要求必须是 public...参数类型匹配 如果我们在配置中,一个本来希望接收 int 类型参数,结果实际上填了一个非整形,会怎样?...,注意两点 实现接口Converter 使用@ConfigurationPropertiesBinding修饰注解 Spring 提供一些默认配置解析规则,如 文件大小DataSize 对应 value...参数校验 参数校验可以说比较常用 case ,比如前面的配置age,基本上不会允许这个参数能是负数,如需要对参数进行校验,我们可以借助@Validated来实现校验 添加 pom 依赖 <dependency

3.7K11

Java如何优雅地实现接口数据校验

在工作中写过Java程序朋友都知道,目前使用Java开发服务最主流方式就是通过Spring MVC定义一个Controller层接口,并将接口请求或返回参数分别定义在一个Java实体类中,这样Spring...具体将从以下几个方面进行介绍: 使用@Validated注解实现Controller接口层数据直接绑定校验; 扩展约束性注解实现数据取值范围校验; 更加灵活对象数据合法性校验工具类封装; 数据合法性校验结果异常统一返回处理...该jar包主要实现并扩展javax.validation(是一个基于JSR-303标准开发出来Bean校验规范)接口。...此外,如果对这样枚举值,我们还想在约束定义中直接匹配代码中枚举定义,以更好地统一接口参数与业务逻辑枚举定义。那么这种情况下,我们还可以自己扩展定义相应地约束注解逻辑。...,这样数据校验错误信息就能通过统一报文格式反馈给调用端,从而实现接口数据报文统一返回!

1.1K30

【SpringBoot基础系列】ConfigurationProperties 配置绑定中那些你不知道事情

不知是否有想过 @ConfigurationPorperties修饰类如何生效 配置参数与定义 POJO 类型匹配时会怎样 配置参数必要性校验可以怎么支持 自定义配置参数,idea 中如何自动补全...Setter 方法,上文中主要是借助 lombok @Data省略 Setter 方法显示声明而已 类属性名与配置文件中配置名要求匹配 大小写不敏感 支持下划线转驼峰 配置类不要求必须是 public...参数类型匹配 如果我们在配置中,一个本来希望接收 int 类型参数,结果实际上填了一个非整形,会怎样?...,注意两点 实现接口Converter 使用@ConfigurationPropertiesBinding修饰注解 Spring 提供一些默认配置解析规则,如 文件大小DataSize 对应 value...,发现可以设置ignoreUnknownFields=false,从字面上表示出现未能识别的成员,不会略错误,但是在实际测试中,并没有生效 6.

2.9K41

K8S散碎问题收集

一看Maven之痛就知道是Java程序员。在与GraalVM匹配Micronuat和Quarkus两个架构没成熟之前,Java在云原生领域非常尴尬。...成熟架构都是全家桶式设计,与容器小而精追求八字不合。如果继承这些成熟东西,另起炉灶。我干嘛不用GO多造点轮子?GO瞎写起来还没Java啰嗦。...整理下确实遇到很多问题,日志问题比较多,容器漂移,如果日志接入ELK,真的不太好排查问题,发布我们就制作镜像,代码直接从oss下载,简单发布其实20s可以完成一个pod,启动脚本采取抽象不通脚本根据镜像版本从...须要持久化应用上k8s: 为了读写速度要绑定物理主机绑定ssd,不能飘;数据备份还是老方式,只不过操作主体换了个地方;数据库自带集群,所以ingress也没啥用;有需要授权,没发绑定机器,用不了...;有些集群节点需要在内部配置,也没有给k8s接口,k8s直接删了重新pull起不来;还有答主说这些问题。

44020

C++、Python、Rust、Scala 构建编译器差异性究竟有多大?

然后我与一个使用了C++团队比较,结果如我预料那样,由于有头文件,以及缺乏汇总类型和模式匹配支持,导致他们编译器大30%。...比较意义 你也许会认为,代码行数(我同时比较代码行数和字节数)是个很糟糕度量,但我认为在这个项目中这种度量可以给出很有用信息。...另一方面,由于她是独立完成,而且实现许多额外功能,因此她在代码质量上只花费了最小限度经历,例如所有错误都会抛出统一异常(所以调试时需要进行栈跟踪),而不是像我们一样每种错误都给出特定错误类型和错误信息...抽象可以让代码在未来更容易扩展,或者能防止特定类型错误,但需要认真考虑,因为它可能会导致三倍代码量,增加理解和重构工作量,也让可能出现bug位置增加了三倍,导致测试和后续开发时间更少。...我还巩固分类法抽象,尽管我目的只是根据当前需求(如访问者模式)来删除代码,以及根据当前需求添加抽象而已,但它还能提供扩展性、可调试性和正确性等。 ?

1.3K40

SQL 审核 | SQLE 2.2308.0 来啦!

,支持标准化上线流程,原生支持 MySQL 审核且数据库类型扩展 SQL 审核工具。...添加成员 u1、u2,为 u1 绑定 MySQL 实例上 DBA 权限,为 u2 绑定 Oracle 实例上 DBA 权限。 2. 修改规则模板,将上线人设置为“匹配拥有数据源权限成员”。...Java 应用零成本接入 SQLE 本期在扫描任务中新增Java 探针方式支持,将 Java 应用零成本地接入 SQLE。...OAuth 2.0 登录后,不能跳转到主页问题 [#883] 修复自定义接口 Swagger 接口定义错误问题 [#879] 修复 DB2 库表元数据扫描,建表语句审核有误问题 [#875] 修复...SQLE 进行开发阶段 SQL 审核 关于 SQLE 爱生开源社区 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型扩展 SQL

19750

硬核!学会SpringMVC从这篇开始

大家好,我是小菜,一个渴望在互联网行业做到蔡小菜。刚,点赞则柔,白嫖则刚! 死鬼~看完记得给我来个三连哦! ?...支持 REST 风格 URL 请求 采用了松散耦合插拔组件结构,比其他 MVC 框架更具扩展性和灵活性 SpringMVC简单使用 1)在 web.xml 中配置 DispatcherServlet...每一种映射策略对应一个具体视图解析器实现类。 视图解析器作用比较单一,将逻辑视图解析为一个具体视图对象。 所有的视图解析器都必须实现 ViewResolver 接口。...每个视图解析器都实现Ordered接口并开放出一个 order 属性, 以通过order 属性指定解析器优先顺序,order 越小优先级越高。...看完赞,都是坏蛋 今天你多努力一点,明天你就能少说一句求人的话! 我是小菜,一个和你一起学习男人。 ?

56430

Spring MVC各组件近距离接触--中--03

否则,当Errors对象绑定对应嵌套对象属性错误信息时候,会认为该属性是上层目标对象上属性,这时就会出现绑定异常。...以模板方法模式实现整个流程控制,并非真得就像模板那样死板,我们可以通过覆写其中某些方法以天津自定义行为逻辑,体现整个流程扩展性和灵活性。...suppressBinding(request)) { //进行数据绑定 binder.bind(request); //留给子类扩展接口 onBind(request,...、WebBindingInitializer…—02 模板方法模式固定基本流程 + 扩展接口: 极大提高框架扩展性 ---- AbstractFormController—表单处理流程模板化...AbstractFormController负责规定好表单处理模板化流程,以及相关扩展接口

32410

The Cascades Framework for Query Optimization(翻译)

摘要 这篇论文描述一个新扩展查询优化框架,解决 EXODUS 和 Volcano优化器/生成器许多不足之处。...克服这些缺陷是Cascades项目的目标,这是一个全新扩展优化器项目,应用了从Volcano项目中学到许多经验教训,包括扩展查询优化、并行查询执行和物理数据库设计。...在探索一个组表达式之前,探索组任务会检查是否已经为给定组探索相同模式。如果是这样,任务会立即终止而生成其他任务。...请注意,这两个集合是不同;我们称它们为逻辑算子和物理算子[Gra93]。虽然以前扩展算子要求这两个集合是不相交但我们已经放弃这个要求。...加上更健壮实现,以满足工业部署要求,我们相信Cascades优化器代表比早期扩展数据库查询优化器更为重大改进。

30340

Java 常见 30 个误区与细节!

在编译(javac Test3.java)这段代码时候,编译器会报以下错误:Test.java:12: 错误: 类重复: com.javastack.Test.Outer.Inner class Inner...从byte到char转换为扩展收缩转换,该转换比较特殊,即先将byte扩展转换到int,然后再收缩到char。...所有的数组都继承Object类,并且实现java.lang.Cloneable与java.io.Serializable接口。数组成员包括变量length(隐式存在)与从Object类继承成员。...使A用new方式创建借口类型,实际上是创建了一个匿名类,该匿名类实现接口类型。...29   如果两个接口声明了相同变量x,则当某接口同时继承这两个接口,或者某类同时实现这两个接口时,通过简单名称访问会产生编译错误

58630

Java常见误区与细节

在编译(javac Test3.java)这段代码时候,编译器会报以下错误:Test.java:12: 错误: 类重复: com.laixintao.Test.Outer.Inner class Inner...因此,char与short或char与byte之间转换必须显示地使用类型转换。 从byte到char转换为扩展收缩转换,该转换比较特殊,即先将byte扩展转换到int,然后再收缩到char。...所有的数组都继承Object类,并且实现java.lang.Cloneable与java.io.Serializable接口。数组成员包括变量length(隐式存在)与从Object类继承成员。...使A用new方式创建借口类型,实际上是创建了一个匿名类,该匿名类实现接口类型。...29 如果两个接口声明了相同变量x,则当某接口同时继承这两个接口,或者某类同时实现这两个接口时,通过简单名称访问会产生编译错误

68430

补习系列-springboot 参数校验详解

Error count: 3", "path": "/validate/form" } 如果是参数类型匹配,会得到: { "timestamp": 1530955359265,...; 后者做了一些增强扩展,如支持分组校验,有兴趣参考这里。...而如果发生参数类型匹配,比如输入age=1f,会产生以下结果: { "timestamp": 1530956206264, "status": 400, "error": "Bad...五、自定义校验规则 框架内预置校验规则可以满足大多数场景使用, 但某些特殊情况下,你需要制作自己校验规则,这需要用到ContraintValidator接口。...在前面的篇幅中,我们提及各种校验失败所产生异常,整理如下表: 异常类型 描述 ConstraintViolationException 违反约束,javax扩展定义 BindException 绑定失败

2.5K10

java基础知识

O开放封闭原则OCP:Open-Closed Principle 软件实体应该是扩展,而不是修改。...面向对象设计原则 封装变化 少用继承 多用组合 针对接口编程 针对实现编程 为交互对象之间松耦合设计而努力 类应该对扩展开发 对修改封闭(开闭OCP原则) 依赖抽象,不要依赖于具体类(依赖倒置DIP...另外,Java在编译时还可捕获类型声明中许多常见错误,防止动态运行时匹配问题出现。...38.Java语言特性 Java致力于检查程序在编译和运行时错误 Java虚拟机实现跨平台接口 类型检查帮助检查出许多开发早期出现错误 Java自己操纵内存减少了内存出错可能性 Java还实现真数组...因为静态方法是在编译时确定,不能多态,也就是不能运行时绑定

1K50

【编程开发】- 01 日志框架

java logging和logback 统一日志API,即日志门面接口层,直白点讲:提供操作日志接口,而具体实现交由Logback、Log4j等日志实现框架,这样就可以实现程序与具体日志框架间解耦...SLF4J SLF4J(Simple Logging Facade For Java)是一个为Java程序提供日志输出统一接口,并不是一个具体日志实现方案,就像我们经常使用JDBC一样,只是一些标准规范接口...这里利用到是设计模式中:适配模式。系统间对接比较常用一种设计模式,系统间接口统一,通过适配模式实现一致。...接口和实现类之间采用一种松耦合设计,有利于灵活扩展,但是在使用时有需要一种技术把它们关联起来,这是软件设计中比较常用到设计思想,JDK 1.6对此专门提供一种技术:SPI。...,学习接口和实现类松耦合关系最后又是如何在运行时进行绑定,或许可以为我们以后系统设计提供些思路,从而构建出更加灵活扩展应用。

72531
领券