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

类继承不能让我的Equals()工作

类继承不能让我的Equals()工作,这个问题看起来是在询问为什么类继承不能让Equals()方法正常工作。

在面向对象编程中,类继承是一种常见的设计模式,它允许一个类从另一个类中继承属性和方法。然而,类继承并不能自动让Equals()方法正常工作,因为Equals()方法的实现需要考虑到两个对象是否具有相同的属性和值。如果子类继承了父类,那么子类的对象可能会有额外的属性,这些属性需要在Equals()方法中进行比较。如果不进行正确的处理,那么Equals()方法可能会返回错误的结果。

为了解决这个问题,可以在子类中重写Equals()方法,并在其中进行适当的比较操作。在重写Equals()方法时,需要遵循以下几点:

  1. 如果两个对象都是同一个类的实例,那么它们应该被视为相等的,除非它们的属性值不同。
  2. 如果两个对象是不同类的实例,那么它们应该被视为不相等的。
  3. 如果两个对象的属性值相同,那么它们应该被视为相等的。
  4. 如果两个对象的属性值不同,那么它们应该被视为不相等的。

在实现Equals()方法时,可以使用Object.Equals()方法来比较对象的引用,并使用Object.GetHashCode()方法来获取对象的哈希值。这些方法可以确保Equals()方法的正确性和一致性。

总之,类继承不能自动让Equals()方法正常工作,需要在子类中重写Equals()方法并进行适当的比较操作。

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

相关·内容

趣学前端 | 类,我想好好继承它的知识点

两年了,我才翻到第十章。因为书太厚,平时都充当电脑支架。 JavaScript 类 话说当年类、原型、继承,差点给我绕晕。 在JavaScript中,类使用基于原型的继承。...如果两个对象从同一个原型继承属性(通常是以函数作为值的属性,或者方法),那我们说这些对象是同一个类的实例。...可能是秋季的清爽,又或者藕粉的甜蜜,这次我感觉自己开「神行千里」的buff,快速读完整章,丝滑多了。 构造函数和new.target 先来介绍一下new.target(MDN文档)。...#name; }; } let g1 = new GetGood(); console.log(g1.goodName()); 委托而不是继承 如果当前要写的类中,有部分行为和另一个类相似,一种方式是通过创建子类来继承行为...我发现我总是在不同的时间段反复爱上JavaScript,偶尔翻出来珍藏的技术书,都能或多或少的有点收获。

6110

c++ 继承类强制转换时的虚函数表工作原理

本文通过简单例子说明子类之间发生强制转换时虚函数如何调用,旨在对c++继承中的虚函数表的作用机制有更深入的理解。...,如上例中“child2* pc21=(child2*)&c1; ”,编译器会把c1对应的内存来当做类child2的内存布局来解析。...因为在类child2的虚函数表中,共存在三个函数,分别为f() b() a(),其中函数b()是第二个,因此编译器就会把对象c1对应的内存来当做类child2的内存布局来解析(注意内存里的内容不变,还是...c1的,即为类child1的内存布局,在这里只有虚函数表),此时在类child1的虚函数表中也找第二个函数,找到了函数a(),因此输出“child1::a()”,运行正常。...但这种行为可能是危险的,若使用的内存布局并不适合真实内存,很可能造成访问越界等问题(如上例中的“pc21->a();”,这次就在类B的虚函数表中找第三个函数,结果没有找到(访问越界),函数运行时崩溃。)

1.2K30
  • 我的神经网络不工作了!我应该做什么? 详细解读神经网络的11种常见问题

    我的建议是从一开始去适应可视化,不要只有当你的网络不工作时才开始适应,这样就能确保在你开始尝试不同的神经网络结构时,你已经检查了完整的流程。这是你能准确评估多种不同方法的唯一方式。...在数据空间中存在较大的不连续性,或者是表示同一事物的大量分离数据(separated data),这将使学习任务变得更加困难。...如果你正在进行回归,那么大多数情况下,你不希望在最后层使用任何类型的激活函数,除非你知道某些特定于你希望生成的值作为输出值。 -为什么? 再考虑一下数据值实际代表什么,以及它们在标准化之后的范围。...在它们三个中选择一个(我最喜欢的是“lecun”),一旦你的神经网络开始运作,你就可以自由地尝试,直到你找到最适合你的任务。 -为什么?...如果你正在进行分类,可能会使用5到10倍的类作为一个良好的初始猜测,而如果你正在进行回归,那么你可能会使用2到3倍数量的输入或输出变量。

    1.7K30

    绝对干货 | Kotlin内联类工作原理及使用案例,看完你会回来谢我的

    初看内联类 内联类非常的简单,您只需要在类的前面加上inline关键字就可以: inline class WrappedInt(val value: Int) 内联类有一些或多或少明显的限制:需要在主构造函数中精确指定一个属性...due to type mismatch auth(Password("12345"), UserName("user1")) } 参数列表变得越来越混乱,并且在调用方来看,编译器不允许出现不匹配的情况...setScale(2, RoundingMode.HALF_UP) } fun main() { println(parseNumber("100.12212")) } 该代码非常简单,可以很好地工作...= jsonString.asJson() 但是,扩展功能也可用于表示其他数据的字符串,尽管可能没有多大意义: "whatever".asJson //将会失败 由于字符串不包含有效的...由于内联类仍处于Alpha阶段,因此您必须接受未来代码会由于其行为的更改而在将来的版本中失效。这一点我们要记住。不过,我认为现在就开始使用它们是有合理的。 ?

    58920

    绝对干货 | Kotlin内联类工作原理及使用案例,看完你会回来谢我的

    初看内联类 内联类非常的简单,您只需要在类的前面加上inline关键字就可以: inline class WrappedInt(val value: Int) 内联类有一些或多或少明显的限制:需要在主构造函数中精确指定一个属性...due to type mismatch auth(Password("12345"), UserName("user1")) } 参数列表变得越来越混乱,并且在调用方来看,编译器不允许出现不匹配的情况...setScale(2, RoundingMode.HALF_UP) } fun main() { println(parseNumber("100.12212")) } 该代码非常简单,可以很好地工作...= jsonString.asJson() 但是,扩展功能也可用于表示其他数据的字符串,尽管可能没有多大意义: "whatever".asJson //将会失败 由于字符串不包含有效的...由于内联类仍处于Alpha阶段,因此您必须接受未来代码会由于其行为的更改而在将来的版本中失效。这一点我们要记住。不过,我认为现在就开始使用它们是有合理的。

    1.3K30

    【Java核心面试宝典】Day9、面向对象常见面试题汇总(四)

    Hello,你好呀,我是灰小猿!一个超会写bug的程序猿! 用坚持缔造技术、用指尖敲动未来! 和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!...因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣! 在此专栏《Java核心面试宝典》记录我们备战梦想的【day 9】!...包含抽象方法的类必须被声明为抽象类,具体类不能包含抽象方法。而抽象类中可以不包含抽象方法,即使一个类中的所有方法都是具体方法,也可以将这个类声明为抽象类。...类的继承只能是单重继承,即一个类只能继承一个父类;但是对接口的继承是允许多重继承的, 即一个类可以继承多个接口,一个接口同样也可以继承多个接口,这样的接口称为子接口。...Comparator 接口包含两个抽象方法 compare和 equals,其中 compare 方法是必须在实现类中实现的,而 equals 方法在任何类中默认已经实现。

    32540

    JAVA和C++对比学习

    我认为是优点的标准是:是否能让代码更易理解,更不容易出错。至于运行效率未作为考虑因数。...C++变量类型长度不固定,有带符号和不带符号的区别 为了在32和64位机上通用,通常需要定义uint32_t之类的类型来统一长度 JAVA变量长度固定,全部都是带符号的 3.3 复合变量类型 C++...一般来说认为委托比继承好,多写一些代码,用纯虚类继承加上委托来处理,会让耦合度降低 JAVA无法多重继承,必须要用接口和委托的方法来实现多重继承 4.2 覆盖 C++使用virtual关键字指定可覆盖方法...,都不能做到跨平台,因此需要多多利用JNI功能,可以大大提高JAVA的工作效能 6 模板 6.1 运行机制 C++在编译时生成所有具体类的代码,在运行前已经自动生成好一批新的类 JAVA采用运行时动态转换类的做法处理...,适用面比较窄,还是使用扩展纯虚基类方法来为特定算法服务比较好 JAVA使用equals(),compare()等接口方法来实现通用算法 最后不能免俗的总结一下: 1)编译构建部分,JAVA在易用性和规范性上完胜

    2.7K40

    设计模式-工厂方法模式

    在简单工厂模式中,我们发现存在很多问题: 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。...要新增产品类的时候,就要修改工厂类的代码,违反了开放封闭原则(对扩展的开放,对修改的关闭)。 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。...设计原则 依赖倒置原则:要依赖抽象,不要依赖具体类。 听起来像是针对接口编程,不针对实现编程,但是这个原则说明了:不能让高层组件依赖底层组件,而且,不管高层或底层组件,两者都应该依赖于抽象。...Collection接口中的一段代码: Iterator iterator(); 继承Collction的List、Set等中有: Iterator iterator(); 接下来再看...总结 优点: 更符合开-闭原则:新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可 符合单一职责原则:每个具体工厂类只负责创建对应的产品 不使用静态工厂方法,可以形成基于继承的等级结构 缺点

    53280

    【Java核心面试宝典】Day8、面向对象常见面试题汇总(三)

    Hello,你好呀,我是灰小猿!一个超会写bug的程序猿! 用坚持缔造技术、用指尖敲动未来! 和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!...因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣! 在此专栏《Java核心面试宝典》记录我们备战梦想的【day 8】!...4、有继承关系时,构造方法的调用顺序是怎样的? 构造一个类的实例时,会沿着继承链调用所有父类的构造方法,父类的构造方法在子类的构造方法之前调用,即构造方法的调用顺序是从父类到子类的。...,equals和“==”的区别等。...我是灰小猿,我们下期见!

    38110

    《面试季》经典面试题(一)

    格式如下: 我知道贵公司招聘这个岗位要求中提到要掌握XX技术,这个技术我自认为自己擅长/我有使用过,因为在之前的XX项目中,处理XX问题时,我独立使用XX技术完成的功能开发。   2....格式如下:我叫XXX,来自XX,毕业于XX学校XX专业,有XX年工作经验,参与过XX个项目,在XX项目中,我主要负责XX功能开发,使用了XX技术。   3....抽象类可以继承实体类,抽象类不能实例化。...继承的父类不一样,HashMap继承的父类是AbstractMap,Hashtable继承的父类是Dictionary 对外提供的API不一样,HashMao提供的containsKey/containsValue...重载和参数的返回值类型无关 小结    不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!

    22011

    HashMap的为啥用尾插法?

    为什么要重新Hash呢,不直接复制过去呢? 因为长度扩大以后,Hash的规则也随之改变。...二 .那我问你HashMap的默认初始化长度是多少?16,为啥是16呢? 为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。...详细请看 至于为啥初始长度是16我觉得就是大家都觉得16通常情况够用了吧.如果你有其他看法可以评论 三 .为啥我们重写equals方法的时候需要重写hashCode方法呢?...因为在java中,所有的对象都是继承于Object类。 Ojbect类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的。...在未重写equals方法我们是继承了object的equals方法,那里的 equals是比较两个对象的内存地址,显然我们new了2个对象内存地址肯定不一样 对于值对象,==比较的是两个对象的值 对于引用对象

    2.4K31

    设计模式之工厂方法模式(FACTORY METHOD)问题模拟工厂方法模式分析依赖倒置原则小结

    我们能不能将制作pizza的行为局限在旁pizzaStore类中,但同时又能让不同类的点去各自实例化自己的pizza类。...Paste_Image.png 定义了一个抽象的基类,里面有个抽象的create方法,我们让其他的纽约地区,芝加哥地区等等不同的继承自这个基类,让子类自己决定怎么创建pizza。...他继承实现了基类的抽象方法。...Paste_Image.png 工厂方法模式常常分为两大类:一个创建产品的创建类,一个产品类,其中创建类定义一个抽象的接口,外加其余的继承自他的具体实现。...有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。

    34340

    大数据必学Java基础(四十):面向对象三大特性之一继承(Inheritance)

    吃饭,睡觉,喊叫,工作共同的东西人类:属性:姓名,年龄,身高方法:吃饭,睡觉,喊叫学生类/教师类/员工类 继承 自 人类 以后定义代码先定义人类:人类: ---》父类,基类,超类属性:姓名,年龄...,身高方法:吃饭,睡觉,喊叫再定义 : ---》子类,派生类学生类:Student:属性:学生编号方法:学习教师类:Teacher属性:教师编号方法:教学员工类:Emploee属性:员工编号方法:工作...在通常情况下,super.可以省略不写在特殊情况下,当子类和父类的属性重名时,你要想使用父类的属性,必须加上修饰符super....如果构造器中没有显示的调用父类构造器的话,那么第一行都有super(),可以省略不写) 如果构造器中已经显示的调用super父类构造器,那么它的第一行就没有默认分配的super()在构造器中,super...: public void love(Boy b){//参数是引用数据类型Boy System.out.println("我男朋友的名字是:"+b.name+",我男朋友的年龄是:"

    44161

    Java IAQ:很少被回答的问题

    但也存在一些特例,比如:不管choice的值是什么,下面代码finally中的语句就不会被执行。 Q:在类C的一个方法m中调用this.getClass()是不是永远返回C? 不。...4、你没有处理好继承。首先,考虑到如果来自两个不同类的对象可以相等的话。在你说“不!一定不会!”...我认为没有可以保证一定安全的方法,但是下面是一些可以加以考虑的事情: 继承一些没有源码的类是很有风险的;在你不能预见的某些情况下,文档可能是不完整的。 调用super方法一般会导致不可预料的问题。...我同意MyClass1继承MyStaticMethods这种做法会误导用户以为MyClass1继承了一些来自MyStaticMethods的方法,并且我也赞同这样做会无法继承真正需要的类,这也是不好的。...大部分Java书籍都是由那些找不到Java相关工作的人写出来的(因为编程几乎总是比出书更挣钱;我都干过,所以我敢这么说)。这种书漏洞百出,会有不好的建议以及糟糕的程序。

    62220

    为什么一些团队反对使用Lombok?

    Lombok虽然给我们节省了get和set方法的编程,但是如果我想知道类的某个属性被哪些方法操作给set了,如果用原生的方法,可以很好的知道调用方。...3.3、不懂 Lombok 注解,会踩坑 我们知道,使用@Data会重写hashCode()和equals()方法,如果是单个实体类,没有继承的话,你使用@Data不会产生问题。...但是如果这个实体类又继承了父类,@Data只会重写子类的hashCode()和equals()方法,不会把父类的属性加进去,这样就会导致,例如当你在使用HashMap的时候,用当前这个实体类作为key,...例如,针对User实体类,我新家一个tag属性,我只想暴露它的get方法,不想暴露set方法给外部,没有用@Data注解的时候,我可以很灵活的进行编程,但是使用@Data注解之后,属性tag被完全暴露在外界了...四、总结 Lombok 作为一款非常流行的工具插件,肯定有它自身的优势所在,到底建不建议在日常开发中使用,我个人其实是一个中立的态度,如果你们团队的人都喜欢它,那推荐你使用,在使用之前,最好培训一下,有哪些坑点

    19310

    为什么有的团队严禁使用Lombok?

    Lombok虽然给我们节省了get和set方法的编程,但是如果我想知道类的某个属性被哪些方法操作给set了,如果用原生的方法,可以很好的知道调用方。...3.3、不懂 Lombok 注解,会踩坑 我们知道,使用@Data会重写hashCode()和equals()方法,如果是单个实体类,没有继承的话,你使用@Data不会产生问题。...但是如果这个实体类又继承了父类,@Data只会重写子类的hashCode()和equals()方法,不会把父类的属性加进去,这样就会导致,例如当你在使用HashMap的时候,用当前这个实体类作为key,...例如,针对User实体类,我新加一个tag属性,我只想暴露它的get方法,不想暴露set方法给外部,没有用@Data注解的时候,我可以很灵活的进行编程,但是使用@Data注解之后,属性tag被完全暴露在外界了...四、总结 Lombok 作为一款非常流行的工具插件,肯定有它自身的优势所在,到底建不建议在日常开发中使用,我个人其实是一个中立的态度,如果你们团队的人都喜欢它,那推荐你使用,在使用之前,最好培训一下,有哪些坑点

    51610

    项目中到底该不该用 lombok?

    Lombok虽然给我们节省了get和set方法的编程,但是如果我想知道类的某个属性被哪些方法操作给set了,如果用原生的方法,可以很好的知道调用方。...3.3、不懂 Lombok 注解,会踩坑 我们知道,使用@Data会重写hashCode()和equals()方法,如果是单个实体类,没有继承的话,你使用@Data不会产生问题。...但是如果这个实体类又继承了父类,@Data只会重写子类的hashCode()和equals()方法,不会把父类的属性加进去,这样就会导致,例如当你在使用HashMap的时候,用当前这个实体类作为key,...例如,针对User实体类,我新家一个tag属性,我只想暴露它的get方法,不想暴露set方法给外部,没有用@Data注解的时候,我可以很灵活的进行编程,但是使用@Data注解之后,属性tag被完全暴露在外界了...四、总结 Lombok 作为一款非常流行的工具插件,肯定有它自身的优势所在,到底建不建议在日常开发中使用,我个人其实是一个中立的态度,如果你们团队的人都喜欢它,那推荐你使用,在使用之前,最好培训一下,有哪些坑点

    35920
    领券