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

创建一个pojo继承自一个类并且具有同一个类的依赖(对象)是否明智?

创建一个POJO(Plain Old Java Object)继承自一个类并且具有同一个类的依赖(对象)是一种常见的设计模式,被称为继承和组合模式。这种设计模式可以用于实现代码的重用和扩展。

优势:

  1. 代码重用:通过继承一个类,可以继承父类的属性和方法,减少重复编写代码的工作量。
  2. 扩展性:通过继承和组合的方式,可以在子类中添加额外的属性和方法,实现对父类的功能进行扩展。
  3. 灵活性:通过继承和组合的方式,可以根据具体需求选择继承或组合的方式,以满足不同的业务场景。

然而,是否明智取决于具体的情况和设计需求。以下是一些考虑因素:

  1. 类之间的关系:如果子类与父类之间具有明确的"is-a"关系,即子类是父类的一种特殊类型,继承可以是合理的选择。如果没有明确的"is-a"关系,而只是需要使用父类的某些功能,那么组合可能更合适。
  2. 代码的可维护性:继承会增加代码的耦合性,当父类发生变化时,子类也需要相应地进行修改。如果父类的变化频繁,可能会导致代码维护困难。而组合相对来说更加灵活,可以通过接口或抽象类定义依赖关系,减少代码的耦合性。
  3. 单一职责原则:如果子类需要继承的父类包含了与子类无关的功能,可能违反了单一职责原则。在这种情况下,组合可能更好地满足需求。

总结起来,创建一个POJO继承自一个类并且具有同一个类的依赖(对象)可能是明智的,但需要根据具体情况进行评估和权衡。在设计过程中,应该考虑类之间的关系、代码的可维护性和单一职责原则等因素,以选择最合适的设计方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于 Spring Boot 中创建对象疑虑 → @Bean 与 @Component 同时作用同一个,会怎么样?

以我理解,@Configuration 加 @Bean 会创建一个 userName 不为 null UserManager 对象,而 @Component 也会创建一个 userName 为 null...,看看 UserManager 到底实例化了几次   只有有参构造方法被调用了,无参构造方法岿然不动(根本没被调用)   如果想了解更深一点,可以读读鄙人:Spring 循环依赖,源码详细分析...创建 userName 不为 null UserManager 对象   问题又来了:为什么不是 @Component 创建 userName 为 null UserManager 对象?...  其中 ConfigurationClassPostProcessor 与 @Configuration 息息相关,其继承结构图如下:   它实现了 BeanFactoryPostProcessor...) 支持 @Configuration + @Bean 与 @Component 同时作用于同一个   启动时会给 info 级别的日志提示,同时会将 @Configuration + @Bean 修饰

95610

Java中摆脱equals,compareTo和toString

更简明职责——摆脱equals、compareTo和toString方法 你曾经查看过java文档中Object吗?也许吧。每当你向上追溯继承时候都会止步于这个。...你会注意到,该类有几个方法是每一个都必须继承。而你最喜欢重写方法可能就是toString(), .equals() and .hashCode() 这三个了。...这样做确有一些好处:你POJO将会更短小简洁,通用方法可以不需要继承而进行复用并且你可以因地制宜地使用它们。 原始代码 首先我们来看下面的代码:这里有一个典型JavaPerson。...在使用中需要从一个Set中打印出每一个person对象并且按照姓在前和名在后顺序排列(以防出现两个相同姓氏的人)。 Person.java ? Main.java ? Output ?...Person 实现了一些方法来控制输出。 hashCode()和equals() 方法确保同一个person对象不会被重复添加到set中。.compareTo() 方法用于排序方法中生成应有的顺序。

63120
  • Java中摆脱equals,compareTo和toString

    更简明职责——摆脱equals、compareTo和toString方法 你曾经查看过java文档中Object吗?也许吧。每当你向上追溯继承时候都会止步于这个。...你会注意到,该类有几个方法是每一个都必须继承。而你最喜欢重写方法可能就是toString(), .equals() and .hashCode() 这三个了。...这样做确有一些好处:你POJO将会更短小简洁,通用方法可以不需要继承而进行复用并且你可以因地制宜地使用它们。 原始代码 首先我们来看下面的代码:这里有一个典型JavaPerson。...在使用中需要从一个Set中打印出每一个person对象并且按照姓在前和名在后顺序排列(以防出现两个相同姓氏的人)。 Person.java ? Main.java ? Output ?...Person 实现了一些方法来控制输出。 hashCode()和equals() 方法确保同一个person对象不会被重复添加到set中。.compareTo() 方法用于排序方法中生成应有的顺序。

    64920

    设计概念统一语言

    本质含义是指一个常规Java对象,不受任何框架、平台约束和限制。除了遵守Java语法之外,它不应该继承预先设定、实现预先设定接口或者包含预先指定注解。...由于定义一个Entity Bean需要继承javax.ejb.EntityBean,这就使得业务逻辑与EJB框架紧耦合,不利于对业务逻辑测试、部署与运行。...,例如Session Bean需要继承javax.ejb.SessionBean,Entity Bean需要继承javax.ejb.EntityBean。...只要职责分配合理,有可能领域模型中一个确乎没有定义具有领域逻辑行为,那也只能说明该领域概念确实不具有领域逻辑,那么这样也不应当称之为是贫血对象。...还有人混淆了领域模型与POJO概念,认为贫血模型对象就是一个POJO,殊不知这二者根本就是两个迥然不同维度。POJO关注定义是否纯粹,领域模型关注是对领域逻辑表达与封装。

    76810

    DTO与值对象POJO比较

    POCO(Plain Old CLR Object)是一个术语,类似POJO,因为“POJO”本身不能在.NET中使用,因为其中字母“J”代表“Java”。因此,POCO具有POJO相同语义。...NET中有很多继承Component,例如System.DataDBCommand和System.DiagnosticsEventLog。...当然,在大多数情况下,您不会创建继承Component。它没有任何意义,因为这种方法带来了许多不必要复杂性,因此与YAGNI原则相矛盾 。...另一个非POCO方法好例子是4.0版之前Entity Framework。每个EF生成继承EntityObject基,因此带来了很多特定于Entity Framework复杂性。...同时,POCO是一个更广泛集合:它可以是值对象,实体,DTO或您可能创建任何其他,只要它不会遗漏您域中意外复杂性。 ? 请注意,POCO可能都有自己身份,也没有自己身份。

    2.2K20

    什么是POJO、PO、DTO、VO、BO ? 什么是EJB、EntityBean?

    POJO内在含义是指:那些没有继承任何、也没有实现任何接口,更没有被其它框架侵入java对象。...先给一个定义吧: POJO一个简单、普通Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色,不继承或不实现任何其它Java框架或接口...我觉得上面的解释很准确,POJO应该不是我们开始认为JavaBean,当然更不是EJB,它不应该依赖于框架(即继承或实现某些框架或接口)。...最后,我们总结一下给一个定义把,POJO一个简单、普通Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色,不继承或不实现任何其它Java...◇对于JavaBean,就是一个Java模型组件,他为使用Java提供了一种标准格式,在用户程序和可视化管理工具中可以自动获得这种具有标准格式信息,并能够创建和管理这些

    3.3K20

    Spring框架:第二章:IOC依赖注入及40个实验

    都是通过手动代码new 对象(); 1.IOC是控制反转,控制反转是指将bean对象创建交给Spring来管理。并且IOC是Spring框架中提供一个非常重要功能。...3.IOC强调将对象创建权反转到IOC容器中 4.2、什么是DI DI 指的是Dependency Injection 。是依赖注入意思。简单点说,就是给一个对象依赖一个对象赋值。...:配置通过静态工厂方法创建bean 实验16:配置通过实例工厂方法创建bean 实验17:配置FactoryBean 实验18:通过继承实现bean配置信息重用 实验19:通过abstract属性创建一个模板...属性指定某个属性允许不被设置 实验40:测试泛型依赖注入★ 4.3、第一个IOC示例程序 – 通过id获取对象(重点) 实验1:通过IOC容器创建对象,并为属性赋值★ 创建一个java工程: 导入jar...答:默认创建同一个 4.4、IOC示例程序 – 通过类型获取对象(重点) 实验2:根据bean类型从IOC容器中获取bean实例★ 配置applicationContext.xml配置文件: <?

    50040

    BeanFactory 和 FactoryBean 理解

    接口,可以访问 Bean 工厂上下文组件 继承 ResourceLoader 接口,以通用方式加载文件资源 继承 ApplicationContextPublisher 接口,拥有发布事件注册监听能力...BeanFactory 基本使用 上面了解了一下 BeanFactory 基本概念之后,下面来介绍一下 BeanFactory 基本使用 新建一个Maven 项目,配置基本 Spring 依赖,...FactoryBeans 支持单例或多例,并且可以根据需要懒加载创建对象,也可以在启动时 急切创建对象 我们先来看一下 FactoryBean 基本接口表示 public interface FactoryBean...,这个对象将要使用在Spring IOC 容器中 getObjectType : 顾名思义就是返回工厂生产出来对象类型 isSingleton: 表示生产出来对象是否是单例 FactoryBean...基本使用 下面我们来用一个简单示例演示一下 FactoryBean 用法 先构建一个普通pojo,只有一个简单属性 public class Tool { private int

    75320

    Spring与SpringBoot整合Spring Data JPA及使用

    一.Spring整合Spring Data JPA 1.创建Spring Data JPA项目,导入依赖,编写配置文件 2.创建dao继承JpaRepository就好了,不用去写任何CRUD接口实现...二.SpringBoot整合使用Spring Data Jpa 1.创建springboot项目: 2.然后对项目的配置文件进行配置: 3 然后编写一个StudentDao并继承JpaRepository...; //继承PagingAndSortingRepository这个接口,并且这个接口里面要传入一个泛型,泛型一个个参数是要操作表对应实体,第二个参数为表主键数据类型 public interface...案例具体步骤如下: 分别创建两个实体Users实体和Roles实体: Users package com.haiexijun.pojo; import javax.persistence.*;...validate: 会验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新值,运行程序会校验实体字段与数据库已有的表字段类型是否相同,不同会报错 然后创建一个pojo包,里面创建一个实体

    4.4K30

    Java EE实用教程笔记----(8)第八章 Hibernate映射机制

    8.1 代理主键映射 代理主键是自定义、用来标识表记录,不具有任何业务实体意义,一般表中加入一个id字段来标识。如【实例7.1】中POJO表示为: ? 对应映射文件配置为: ?...由于这种情况是把主键放入POJO中,故数据存取也不同。 保存一个对象: ? 修改一个对象: ?...在实际应用中,存在这样一种情况:有很多种学生,如研究生、本科生等,它们都有学生基本属性,但又有各自特殊属性,故适合使用继承来实现这样对象模型。 例如,学生POJOXs.java代码为: ?...二 每个一个数据表 【实例8.1】采用“每个一个数据表”方式,实现继承关系映射。 创建Java项目,命名为“Inheritance_mapping”。...其实在很多情况下,可以是几个人住在同一个房间里面,就是多对一关系,但是如果把这个多变成唯一,也就是说让一个人住一个房间,就变成了一对一关系了,这就是前面说一对一关系其实就是多对一关联关系一种特殊情况

    1.1K20

    Java对象拷贝

    需要创建被拷贝类一个一模一样对象,新对象和老对象不共享内存,对新对象修改不会影响老对象价值对比无论是深拷贝还是浅拷贝,都需要实现Cloneable接口并且重写clone方法。...深拷贝相比于浅拷贝速度较慢并且花销较大。两者主要区别在于是否支持引用类型属性拷贝。java.lang.Objectclone()方法clone方法将对象复制一份并返回给调用者。...如果对象引用经常改变,就要使用深拷贝。继承java.lang.Objectclone()方法是浅复制,除非加入工具上面提到深拷贝,需要拷贝所有依赖引用对象。...Orika深拷贝,不用担心原始和克隆指向同一个对象问题。...此时可以使用工具就不要太多:FastJson,Jackson,Gson等研工具很多公司都有研工具习惯(传统),研有不少好处,如稳定性和性能。

    6910

    Spring之DI

    POJO潜能 你或许发现(或者实际用过)很多框架通过强迫应用继承它们或实现它们接口从而导致应用于框架绑死。...Spring竭力避免自身API弄乱你应用代码,最坏场景是一个或许会使用Spring注解,但它依旧是POJO,Spring赋予POJO魔力方式之一就是通过DI(依赖注入)来装配它们。...在项目中应用DI,代码会变得异常简单并且更容易理解和测试(简单,易理解,易测试)。 任何一个有实际意义应用都会由两个或者更多组成,这些之间相互之间进行协作来完成特定业务逻辑。...耦合具有两面性:一方面紧密耦合代码难以测试,难以复用、难以理解,并且典型地表现“打地鼠”式bug特性。另一方面一定程度耦合又是必须。...通过DI,对象依赖关系将由系统中负责协调各对象第三方组件在创建对象时候进行设定。对象无需自行创建或管理它们依赖关系。DI带来最大收益是——松耦合。

    42420

    Java开发编程规范: 4.OOP 规约

    【强制】避免通过一个对象引用访问此类静态变量或静态方法,无谓增加编译器解析成本,直接用名来访问即可。 说明:getObject()与 get0bject()问题。...一个是字母 O,一个是数字 0,加@Override 可以准确判断是否覆盖成功。另外,如果在抽象中对方法签名进行修改,其实现会马上编译报错。...反例:POJO gmtCreate 默认值为 new Date(),但是这个属性在数据提取时并没有置入具体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。...使用 IDE 中工具:source> generate toString 时,如果继承了另一个 POJO ,注意在前面加一下 super.toString。...【推荐】成员与方法访问控制从严:      1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。

    96441

    28个Java开发常用规范技巧总结

    6、当pojo在进行编写时候要重写相应toString方法,如果该pojo继承了另外一个pojo,那么请在相应tostring函数中加入super.toString()方法。...通过重写toString方法有利于在日志输出时候查看相应对象属性内容进行逐一分析,对于一些有继承关系对象而言,加入了super.toString方法更加有助于对该对象理解和分析。...下列情况使用 final 关键字: 不允许被继承,如:String 。 不允许修改引用对象,如:POJO 域变量。 不允许被重写方法,如:POJO setter 方法。...举例说明: 1)HashSet在存储数据时候是存储不重复对象,这些对象在进行判断时候需要依赖hashcode和equals方法,因此需要重写。...通关观察可以发现,HashSet底层通过将传入值再传入到一个HashMap里面去进行操作,进入到HashMap里面之后,会先通过调用该对象hashcode来判断是否有重复值,如果有再进行equals

    57830

    MyBatis 与 Spring 整合

    】下创建一个名为 “UserMapper.xml” Mapper 映射文件。...再在【web】文件夹下新建一个【WEB-INF】默认安全文件夹,并在其下创建一个【classes】和【lib】,并将项目的输出位置,改在【classes】下: 工程完整初始结构如下: 第二步:引入依赖...User findUserById(int id) throws Exception; } 然后在同一个包下创建 UserDAO 接口实现 UserDAOImpl: package cn.wmyskxz.dao...,将其中定义 sqlSessionFactory 对象当做参数注入进去,这样 UserDAOImpl 继承 SqlSessionDaoSupport 才会起到作用: <!...原理: 在 applicationContext.xml 配置文件中配置 mapper 批量扫描器,会从 mapper 包中扫描出 Mapper 接口,自动创建代理对象并且在 Spring 容器中注入

    95960

    深入理解Spring框架作用(Spring in action 学习笔记)激发POJO潜能依赖注入应用切面使用模板消除样板式代码

    激发POJO潜能 如果你从事Java编程有一段时间了, 那么你或许会发现(可能你也实际使用过) 很多框架通过强迫应用继承它们或实现它们接口从而导致应用与框架绑死。...尽管形式看起来很简单, 但POJO一样可以具有魔力。 Spring赋予POJO魔力方式之一就是通过DI来装配它们。 让我们看看DI是如何帮助应用对象彼此之间保持松散耦合。...通过DI, 对象依赖关系将由系统中负责协调各对象第三方组件在创建对象时候进行设定。 对象无需自行创建或管理它们依赖关系, 如图1.1所示, 依赖关系将被自动注入到需要它们对象当中去。 ?...如果一个对象只通过接口(而不是具体实现或初始化过程) 来表明依赖关系, 那么这种依赖就能够在对象本身毫不知情情况下, 用不同具体实现进行替换 现在BraveKnight可以接受你传递给它任意一种...所造成结果就是这些组件会具有更高内聚性并且会更加关注自身业务, 完全不需要了解涉及系统服务所带来复杂性。 总之, AOP能够确保POJO简单性。

    1.2K30

    Android 进阶解密笔记-Java 加载器

    还有一点,只有两个名一致并且同一个加载器加载,Java虚拟机才会认为是同一个,否则不是。...它是ClassLoader内部类,继承ClassLoader。是一个单例,访问修饰符是默认,只有在同一个包中才可以访问,因此应用程序中无法直接调用。...对象 对象创建 判断对象对应是否加载、链接与初始化 虚拟机接收到一条new指令时,首先会检查这个指定参数是否能在常量池中定位到一个符号引用,并且检查这个符号引用代表是否已被加载、链接与初始化过...实例数据:用于储存对象各种类型字段信息(包括从父继承) 对其填充:不一定存在,没有实际意义,只是起到占位作用 Java 对象在虚拟机中生命周期 创建阶段: 为对象分配存储空间 构造对象 从超到子类对...这个阶段对象至少具有一种引用强,软,弱,虚引用 不可见阶段 在程序中找不到对象任何强引用,比如程序执行已经超出了对象作用域。

    52420

    mybatis深入学习

    POJO 对于从数据库中查询单条数据库时候,返回一个POJO只需要sql查询字段和POJO属性相同即可自动映射,当然我们也可以开启驼峰配置 resultType指定返回POJO名即可,...) List selectByDeptId(Integer deptId); 如果是一个参数,并且POJO对象,我们还可以使用_parameter判断是否为空,如下: <if...,但是我们也可以自定义类型处理器,并且作用到指定需要处理类型中,自定义方式有两种,如下: 实现TypeHandler接口 继承BaseTypeHandler【推荐】 实例 实例:我们需要将一个List...,在四大对象创建时候,都会调用一个pluginAll方法返回一个代理对象 * 这个方法不需要做修改,默认就行了 * @param target 目标对象 * @return 返回代理对象...如果有多个插件作用在同一个对象同一个方法上,那么插件执行顺序是怎样

    1.1K10

    女皇武则天:我不愿被 extends

    01、 利用继承,我们可以基于已存在构造一个继承好处在于,子类可以复用父非 private 方法和非 private 成员变量。...is-a 是继承一个明显特征,就是说子类对象引用类型可以是一个。...假如 Wangdaer 也继承了 Wanger,并且 wanger 引用了Wangdaer 对象,那么 wanger.write() 仍然可以正常运行。 当然了,有些不愿意被继承,也没法被继承。...继承可以使得子类具有成员变量和方法,还可以重新定义、追加成员变量和方法等。 在设计继承时候,可以将通用方法和成员变量放在父中。...该方法使用区分度最高“==”操作符进行判断,所以只要两个对象不是同一个对象,那么 equals() 方法一定返回 false。

    41120

    POJO简介

    POJO内在含义是指那些没有从任何继承、也没有实现任何接口,更没有被其它框架侵入java对象。 二:为什么会有POJO?...三:POJO意义 POJO让开发者可专注于业务逻辑和脱离框架单元测试。除此之外, 由于POJO并不须要继承框架或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。...持久对象实际上必须对应数据库中entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除。...虽然JavaBean是Java,同时它也具有自己一些特征: 1、 JavaBean是一个public 2、 JavaBean有一个不带参数构造方法 3、 JavaBean...由于 javabean是基于java语言,因此javabean不依赖平台,具有以下特点:   1. 可以实现代码重复利用   2. 易编写、易维护、易使用   3.

    1.6K30
    领券