当前位置: 首页 > 知识库问答 >
问题:

我们如何让一个子实例不等于它的父实例?

乐正乐湛
2023-03-14

例如,如果我有一个Person父类和一个学生扩展Person子类,是否有办法实现equals()或hashCode()函数,其中它们的实例不会彼此相等?

假设Person类有字段name和age。学生类具有字段等级和以下构造函数:

public Student(String name, int age, int grade) {
super(name, age);
this.grade = grade;
}

如果一个是Person的实例,另一个是Student的实例,那么我如何创建两个具有匹配字段的实例,但如果其中一个是该实例,那么它将返回false?

Person student1 = new Student("John", 14, 8);
Student student2 = new Student("John" 14, 8);

是否可以使student1.equals(student2)返回false?

共有1个答案

闾丘炫明
2023-03-14

除非您真的希望Student的任何两个实例总是不同的(为此,您不能简单地覆盖equals()method,它基本上会比较对象引用,而不是内容本身),否则这是没有意义的。

将< code>new Student("John ",14,8)赋给< code>Person或< code>Student变量不会使它们之间有所不同。对象在内容上是完全一样的(他们确实是两个不同的对象)。你只是用不同的类来引用它们。

 类似资料:
  • 我的TabPane似乎只能水平填充其宽度,而不能垂直填充。我现在的解决方法是这样做: 但是,如果我使用该高度,它显然比实际保留的区域大(在TabPane上方有一个菜单栏)。(或者它是否适当地调整了它的大小?它也有点感觉不对,我必须设置简单的布尔值,因为它的行为完全符合水平变化的预期。 场景是这样设置的: 当然还有更多的代码,但它只包含与拖放相关的侦听器,并且这个问题发生在他们中的任何一个做任何事情

  • 所以我在Stack Overflow用户的帮助下创建了这段代码。 这就回来了 现在这是正确的,但是我希望只返回非零值负数或正数都可以 在我的例子中,有 我想让的输出排除或者如果任何其他人有一个0。。。我想要排除它。。。 因此,在这种情况下,我的输出应该返回 我怎么能这么做??

  • 对于此示例: 如何检查 是否是 Foo 的实例(但不是其 foo 子类的实例)?那是: checkInstance(qux,Foo.class)=true checkInstance(qux,Bar.class)=false 有没有类似于< code>instanceof的语句来进行这种检查?或者我应该使用< code>qux.getClass()。equals(Foo.class)

  • 我有java中的类:。和类,它扩展了类。 Class保留Class的实例。 我注意到,当我调用类B的构造函数时(当我在类A中初始化这个参数时),它会执行super(),创建一个新的实例A,并初始化所有It字段。 我如何告诉class

  • 我有一个父实体a,它与映射在a_B表和a_C表中的实体B和实体C有多对多关系。在持久化时,我希望只持久化a、a_B和a_C,而不持久化B和C。如果我不使用cascadetype。all i get“object references a unsaved transient instance-save the transient instances before flush”错误。如果我使用casc

  • 我有三节课。 > 一个抽象类,abstractA有一个受保护的构造函数 一个类扩展了抽象类,父类有两个构造函数 一个类扩展父类,子类有一个构造函数 这是从抽象类扩展而来的父类 这是从父类扩展而来的子类 自定义组件看起来像这样 所以,当spring为特定测试实例化所有bean时,它会正确地实例化子bean。当父bean被实例化时,它得到2个bean[父和子]。所以,我最终会出错, 类型父的多个bea