草庐IT

Inheritance

全部标签

java - 从抽象类派生时如何遵守equals()的契约

在他的EffectiveJava一书中,JoshuaBloch描述了当派生类向检查中添加额外字段时,equals()的约定会出现的陷阱。通常,这会破坏对称性,但Bloch指出“您可以将值组件添加到抽象类的子类,而不会违反equals契约”。显然这是真的,因为不能有抽象类的实例,所以不存在可违反的对称性。但是其他子类呢?我写了这个例子,故意省略哈希码实现和空检查以保持代码简短:publicabstractclassVehicle{privatefinalStringcolor;publicVehicle(Stringcolor){this.color=color;}publicStrin

java - 用于 2d 游戏引擎的 Graphics2D 包装器

我正在尝试编写一个2d游戏引擎,并且正在尝试实现一个视口(viewport)系统,这样当我在某个视口(viewport)中绘图时,游戏坐标将转换为屏幕坐标,而无需手动执行转变。我想要做的是创建一个添加setViewport方法的Graphics2D包装器。我认为有两种选择:创建一个类,该类具有Graphics2D的实例,并具有与Graphics2D相同的所有方法以及setViewport并且只需调用Graphics2D实例上的相应方法。子类Graphics2D并添加一个setViewport方法,然后从Graphics2D转换到这个新类我尝试了#2,因为#1看起来很不切实际,但遇到了C

java - 抽象类和 Spring MVC @ModelAttribute/@RequestParam

我的Spring/Hibernate应用程序中有模型类的层次结构。当向SpringMVCController提交POST表单时,是否有任何标准方法来指定正在提交的对象的类型,以便Spring可以实例化在接收方法的@ModelAttribute或@RequestParam中声明的类型的正确子类?例如:publicabstractclassProduct{...}publicclassAlbumextendsProduct{...}publicclassSingleextendsProduct{...}//Meanwhile,inthecontroller...@RequestMappin

java - 类继承 : generic extends generic

假设我有一个简单的类publicclassMyObject{}以及处理MyObject子类的handler接口(interface)publicinterfaceMyObjectHandler{Listhandle(Listobjects);}假设,我有BigObjects和SmallObjects(它们都扩展了MyObject)并且我想为它们设置单独的处理程序。因此,我创建了两个具有特定泛型的MyObjectHandler接口(interface)。classBigObjectextendsMyObject{}classSmallObjectextendsMyObject{}//Ha

java - 扩展内部接口(interface)?

我有一个简单的问题:为什么Eclipse强烈要求实现这两个接口(interface)?publicabstractclassGatewayimplementsIPlayerity,IItemity{publicinterfaceIPlayerity{...}publicinterfaceIItemity{...}//I...ity}我收到此错误消息:IPlayeritycannotberesolvedtoatype 最佳答案 鉴于JLS的工作方式,您有一个无法解决的循环依赖(尽管我不确定在JLS的哪个位置记录了这一点)。IPlaye

java - 构造函数不是类的成员吗?

构造函数不是类的成员吗?如果是,为什么不能继承?JLS7.0saysthatconstructorsarenotmembers因此不能被继承。这仅适用于Java还是通用的OOP范例? 最佳答案 出于良好的设计原因,构造函数不会被继承。如果它们是继承的,那么您在尝试将它们隐藏在继承的类中时会遇到问题。考虑这个例子:classPlane{publicPlane(intpassengerCapacity,intcargoCapacity){...}}classF18extendsPlane{publicF18(){super(0,0);.

java - 在 JPA 中链接不同实体类型的最佳方法

简短版本用于仓促:我的域模型中有多个表/实体具有相同的字段(UUID)。有一个表,我需要将此类实体的行/实例链接到其他JPA管理的实体。换句话说,该链接表中字段的实例不会预先知道。我能想到的两种方法是:使用抽象实体和TABLE_PER_CLASS策略,或者使用@MappedSuperClass也将实例的类名存储在链接表中,或类似的东西让我定义从正确的表中获取实际实例的逻辑。两者在复杂性和性能方面各有优缺点。您认为哪个最好,是否有第三种选择,或者您过去是否尝试过类似的方法并且建议/强烈警告不要这样做?长版如果你想要更多背景:我有一个数据库/对象模型,其中许多类型都有一个公共(public

java - 具有继承性的实体的 JPA native 查询

我有一个实体类和一个基于该实体的子类:@Entity@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)publicclassA和@EntitypublicclassBextendsA我需要发出一个native查询,该查询仅在基类(A)上使用存储过程。如果我尝试如下:entityManager.createNativeQuery("select*fromAawhereprocedure(f)",A.class).getResultList()我收到关于“在结果集中找不到列clazz_”的错误。我假设JPA提供者添加此列是为了区分基

java - 继承与接口(interface)

我一直在尝试理解涉及接口(interface)时的继承。我想知道子类是如何创建的,如果它们遵循以下内容:例如,假设我有:实现接口(interface)I的父类(superclass)和几个扩展父类(superclass)A的子类我的问题我是否必须在所有扩展A的子类中提供接口(interface)方法“q和r”的实现?如果我不在子类中提供接口(interface)的实现,我是否必须将该子类设为抽象类?任何子类都可以实现I吗?例如C类扩展A实现I,这可能吗?即使它已经扩展了实现I的父类(superclass)?假设我没有从接口(interface)I提供方法r的实现,那么我将不得不创建父类

java - 在 Java 继承中隐藏字段

在类中,与父类(superclass)中的字段同名的字段隐藏父类(superclass)的字段。publicclassTest{publicstaticvoidmain(String[]args){Fatherfather=newSon();System.out.println(father.i);//why1?System.out.println(father.getI());//2System.out.println(father.j);//why10?System.out.println(father.getJ());//why10?System.out.println();So