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

(16) 继承的细节

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

69890

深入理解 Java17 新特性:Sealed Classes

0 关键总结Java SE 15在2020年9月发布,预览功能引入“封闭类”(JEP 360)封闭类是一种限制哪些其他类或接口可扩展它的类或接口类似枚举,封闭类在领域模型中捕获替代方案,允许程序员和编译器推理其穷尽性封闭类对于创建安全的层次结构也很有用...,通过解耦可访问性和可扩展性,允许库开发者公开接口,同时控制所有实现封闭类与记录和模式匹配一起工作,以支持更数据中心化的编程形式1 预览功能鉴于Java全球影响力和高兼容性承诺,语言功能设计错误代价非常高...任何其他尝试扩展Shape的类或接口将会收到编译错误(或在运行时尝试生成声明Shape为超类型的非标签类文件时,收到运行时错误)。我们已熟悉通过final类限制扩展;封闭可被认为是终结性的泛化。...(其他工具也可以利用这些信息;Javadoc工具在生成的封闭类文档页面中列出了允许的子类型。)Java SE 14引入一种有限形式的模式匹配,将来会扩展。...使用封闭接口,库作者无需在使用多态作为实现技术、允许不受控制的扩展或将抽象公开为接口之间做出选择——他们可三者兼得。作者可能选择让实现类可访问,但更可能的是,实现类将保持封装。

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

    06 Java 的继承

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

    54420

    JAVA语言的特征及核心

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

    54920

    Java--泛型程序设计语法

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

    66990

    Java 新特性前瞻:封印类

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

    60910

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

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

    4.1K11

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

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

    3.4K41

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

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

    1.2K30

    K8S散碎问题收集

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

    46320

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

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

    1.4K40

    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

    26650

    The Cascades Framework for Query Optimization(翻译)

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

    53840

    硬核!学会SpringMVC从这篇开始

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

    61630

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

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

    38510

    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,则当某接口同时继承这两个接口,或者某类同时实现这两个接口时,通过简单名称访问会产生编译错误。

    60230

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

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

    2.6K10

    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,则当某接口同时继承这两个接口,或者某类同时实现这两个接口时,通过简单名称访问会产生编译错误。

    70730

    Spring MVC:从入门到精通

    灵活性:提供了灵活的配置文件和可扩展的插件,使得开发人员可以根据项目需求进行自定义配置和扩展。高度可定制化:支持多种视图技术(如JSP、Thymeleaf等),可以根据项目需求选择最适合的视图技术。...配置繁琐:Spring MVC的配置文件较多,需要编写大量的XML或Java配置代码,使得项目的配置比较繁琐。...2.3 数据绑定(Data Binding)Spring MVC提供了自动数据绑定的功能,可以将请求参数绑定到Java对象上。这大大简化了参数处理的过程。...灵活性:提供了灵活的配置文件和可扩展的插件,使得开发人员可以根据项目需求进行自定义配置和扩展。高度可定制化:支持多种视图技术(如JSP、Thymeleaf等),可以根据项目需求选择最适合的视图技术。...配置繁琐:Spring MVC的配置文件较多,需要编写大量的XML或Java配置代码,使得项目的配置比较繁琐。

    24621

    java基础知识

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

    1K50
    领券