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

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

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

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

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

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

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

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

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

相关·内容

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.1K30

神经网络工作了!应该做什么? 详细解读神经网络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阶段,因此您必须接受未来代码会由于其行为更改而在将来版本中失效。这一点我们要记住。不过,认为现在就开始使用它们是有合理。 ?

    57520

    绝对干货 | 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 方法在任何中默认已经实现。

    31340

    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.6K40

    设计模式-工厂方法模式

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

    52580

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

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

    36510

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

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

    20711

    HashMap为啥用尾插法?

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

    2K31

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

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

    33540

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

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

    41861

    项目中到底该不该用 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 作为一款非常流行工具插件,肯定有它自身优势所在,到底建建议在日常开发中使用,个人其实是一个中立态度,如果你们团队的人都喜欢它,那推荐你使用,在使用之前,最好培训一下,有哪些坑点

    33820

    为什么有的团队严禁使用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 作为一款非常流行工具插件,肯定有它自身优势所在,到底建建议在日常开发中使用,个人其实是一个中立态度,如果你们团队的人都喜欢它,那推荐你使用,在使用之前,最好培训一下,有哪些坑点

    41610

    为什么一些团队反对使用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 作为一款非常流行工具插件,肯定有它自身优势所在,到底建建议在日常开发中使用,个人其实是一个中立态度,如果你们团队的人都喜欢它,那推荐你使用,在使用之前,最好培训一下,有哪些坑点

    12410

    Java IAQ:很少被回答问题

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

    61520

    《面试季》高频面试题-基础篇(三)

    ==是运算符,用于比较两个变量是否相等,而equals是Object方法,用于比较两个对象是否相等。   默认Objectequals方法是比较两个对象地址,此时和==结果一样。...抽象是否可实现(implements)接口?抽象是否可继承具体(concrete class)?   ...1、接口可以继承(extends)接口,且支持多继承(即一个接口继承多个接口)   2、抽象可以实现(implements)接口   3、抽象继承具体也可以继承抽象。...finalize:Object中定义方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作。...这个方法是由垃圾收集器在销毁对象时调用,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。 小结    积跬步,无以至千里;积小流,无以成江海。

    18420
    领券