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

为什么被重写的方法行为怪异呢?

被重写的方法行为怪异可能是由于以下几个原因:

  1. 重写方法的逻辑错误:在重写方法时,可能出现了逻辑错误或者没有正确理解父类方法的预期行为。这可能导致重写方法的行为与预期不符,从而表现出怪异的行为。
  2. 继承关系的问题:重写方法可能涉及到继承关系的问题。如果子类没有正确地继承父类的方法,或者在重写方法时没有正确地调用父类的方法,就会导致行为异常。
  3. 上下文环境的变化:重写方法的行为可能受到上下文环境的影响。如果重写方法依赖于某些外部变量或状态,而这些变量或状态在重写方法被调用时发生了变化,就会导致行为异常。
  4. 多态性带来的影响:重写方法可能涉及到多态性的概念。如果在调用重写方法时,对象的实际类型与编译时类型不一致,就会导致行为异常。

为了解决重写方法行为怪异的问题,可以采取以下措施:

  1. 仔细阅读父类方法的文档和源代码,确保正确理解父类方法的预期行为。
  2. 在重写方法时,确保正确地调用父类的方法,以保持继承关系的正确性。
  3. 尽量避免在重写方法中依赖外部变量或状态,或者在调用重写方法前确保这些变量或状态的正确性。
  4. 在使用多态性时,确保对象的实际类型与编译时类型一致,或者使用类型转换操作符进行类型转换。

总结起来,被重写的方法行为怪异可能是由于逻辑错误、继承关系问题、上下文环境变化或多态性带来的影响。为了解决这个问题,需要仔细理解父类方法的预期行为,正确调用父类方法,避免依赖外部变量或状态,并确保对象的实际类型与编译时类型一致。

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

相关·内容

为什么重写对象equals方法重写hashcode方法真正原因!

javaGuide里说到了为什么重写hashcode原因: 3)为什么重写 equals 时必须重写 hashCode 方法? 如果两个对象相等,则 hashcode 一定也是相同。...因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖。 hashCode()默认行为是对堆上对象产生独特值。...后面自己看了别的博文,理解了下,我觉得一定要重写hashcode主要原因是要保障equals方法特性,即equals返回结果必须与其hashcode比较结果必须保持一致. 为什么要这样保障?...(摘自我 Java 启蒙书《Head First Java》第二版)。,为什么 ?这样我们就大大减少了 equals 次数,相应就大大提高了执行速度。...2,重写equals()方法重写hashCode()方法。 3,一般相等对象都规定有相同hashCode。 4,String类重写了equals和hashCode方法,比较是值。

92030

为什么Java中类成员变量不能重写?成员变量在Java中能够重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域方法

这篇文章讨论了Java面向对象概念中一个基本概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够重写么?...Paste_Image.png 按照我们已有的多态概念,第二个应该是输出sub才对,但却输出了super。这是为什么?...意思就是: 在一个类中,子类中成员变量如果和父类中成员变量同名,那么即使他们类型不一样,只要名字一样。父类中成员变量都会被隐藏。在子类中,父类成员变量不能简单用引用来访问。...而是,必须从父类引用获得父类隐藏成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父类成员变量,所以成员变量访问不能像方法一样使用多态去访问。

3.5K40

为什么说TRIZ是站在巨人肩膀“抄袭”,还能赢得尊重方法

为什么说TRIZ是站在巨人肩膀“抄袭”,还能赢得尊重方法?...图片 TRIZ分析了世界近250万份高水平发明专利,总结出各种技术发展进化遵循规律模式,以及解决各种技术矛盾和物理矛盾创新原理和法则,建立一个由解决技术问题,实现创新开发各种方法、算法组成综合理论体系...TRIZ作为指导我们创造性地解决问题方法论,可以加快发明创造速度,提出高质量问题解决方案,产生有创新性产品,对于提高企业自主创新能力和改进研发工作具有重要作用。...其中,TRIZ理论基础对于产品创新具有重要指导作用;分析工具是TRIZ用来解决矛盾具体方法或模式,它们使TRIZ理论能够得以在实际中应用,其中包括矛盾矩阵、物-场分析、ARIZ发明问题解决算法等...;而知识数据库则是TRIZ理论解决矛盾精髓,其中包括矛盾矩阵(39个工程参数和40条发明原理)、76个标准解决方法…… 这些理论、工具和数据库能够很好给企业在解决实际问题时,提供参考和借鉴,帮助企业能够将实际问题细化分解

31430

创建子类对象时,父类构造函数中调用被子类重写方法为什么调用是子类方法

public static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建...但是:创建B对象父类会调用父类方法? 答案: 当子类加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类方法,子类方法引用会指向子类方法,否则子类方法引用会指向父类方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

面试官:DTD 有什么作用?

产生历史原因是什么?使用时需要注意什么? 怪异模型 使用浏览器自己方式解析执行代码,因为不同浏览器解析执行方式不一样,所以称之为怪异模式。...二者都有什么差别 在怪异模式下,排版会模拟 Navigator 4 与 Internet Explorer 5 非标准行为。为了支持在网络标准广泛采用前,就已经建好网站,这么做是必要。...在标准模式下,行为即(但愿如此)由 HTML 与 CSS 规范描述行为。 使用时需要注意什么?...它是一个新版本HTML语言,具有新元素,属性和行为, 它有更大技术集,允许构建更多样化和更强大网站和应用程序。...单纯HTML代码是不带任何样式只是用来标记这一段是标题、这一块是代码、那一个是要强调内容等等,但是为什么我们只写HTML在浏览器中不同标签也是有不同样式

97410

【面试说】怪异 JavaScript

里面包含了 25 道选择题,每个都是一个简单表达式,然后让你选择,都是一些 JavaScript 怪异行为体现,最后网站生成答案和解析,帮助你更好理解 JavaScript 怪异行为。...稀疏数组,[,,] 中间元素为 empty ,这种我们就称为稀疏数组,我们也可以通过类似 new Array (2) 方式创建稀疏数组。那为什么不是 4 而是 3 ?...010 JavaScript 视为八进制数。因此,它值是以 8 为基数。010 解析成 8,减 3 得 5。...会存在以下怪异行为,undefined 不会报错。【这里我也找不到合适理由去解释】。...这也意味着 NaN 和 NaN++ 表示相同值。 结语 Javascript 之所以有以上怪异表现,主要是初期设计过于匆忙,1995 年仅用用了 10 天来完成

31810

干货 | 国外大神总结10个Java编程技巧!

前言 “任何可能出错事情,最后都会出错。”这就是人们为什么喜欢进行“防错性程序设计”原因。 偏执习惯有时很有意义,有时则不够清晰也不够聪明,也许当你想到这样写的人时候还会觉得有点怪异。...所以,-1 就可以理所当然拿来用,对吗?我说不对,看看这个: ? 谁知道。...毕竟,我们有非常多关于NULL——价值亿万美金错误讨论。为什么不开始讨论 -1,某种意义上来说 -1 是 null 在int类型下另一种形式。 4 避免意外赋值 是的。...因此除了接口(专门用于继承)都应该是严格 final。 ? 是的,写成final。如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。...作为小编,我敢肯定告诉你重写类/方法并不是一个好主意。 7 所有的变量和参数都用final声明 就像我说。我不相信自己不会无意间重写了某个值。这么说来,我的确一点都不相信自己。

61210

搞懂 parseInt() 怪异行为

1. parseInt() 怪异行为 parseInt(numericalString)始终将其第一个参数转换为字符串(如果不是字符串),然后将该数字字符串解析为整数值。...为什么 parseInt(0.0000005) 有这样一个怪异行为?...2.解决parseInt()怪异行为 我们再看一看 parseInt(numericalString) 第一个参数:如果它不是字符串,则将其转换为字符串,然后解析,并返回解析后整数。...小于10-6次方 (例如0.0000005,也就是5*10-7)浮点数转换成字符串时写成指数表示法(例如5e-7是0.0000005指数表示法)。...这就是为什么在 parseInt() 中使用这么小浮点数会导致意想不到结果:只有指数表记重要部分(例如 5e-7 中 5)会被解析。

1K10

国外大神总结 10 个 Java 编程技巧!

这就是人们为什么喜欢进行“防错性程序设计”原因。偏执习惯有时很有意义,有时则不够清晰也不够聪明,也许当你想到这样写的人时候还会觉得有点怪异。...所以,-1 就可以理所当然拿来用,对吗?我说不对,看看这个: ? 谁知道。...毕竟,我们有非常多关于NULL——价值亿万美金错误讨论。为什么不开始讨论 -1,某种意义上来说 -1 是 null 在int类型下另一种形式。 4. 避免意外赋值 是的。...因此除了接口(专门用于继承)都应该是严格 final。 ? 是的,写成final。如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。...作为Java技术栈公众号小编,我敢肯定告诉你重写类/方法并不是一个好主意。 7. 所有的变量和参数都用 final 声明 就像我说。我不相信自己不会无意间重写了某个值。

2.2K20

国外大神总结 10 个 Java 编程技巧!

偏执习惯有时很有意义,有时则不够清晰也不够聪明,也许当你想到这样写的人时候还会觉得有点怪异。下面是我列出个人感觉最有用而又偏执 10 项 Java 编程技巧。请看: 1....所以,-1 就可以理所当然拿来用,对吗?我说不对,看看这个: ? 谁知道。...毕竟,我们有非常多关于NULL——价值亿万美金错误讨论。为什么不开始讨论 -1,某种意义上来说 -1 是 null 在int类型下另一种形式。 4. 避免意外赋值 是的。...因此除了接口(专门用于继承)都应该是严格 final。 ? 是的,写成final。如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。...作为Java技术栈公众号小编,我敢肯定告诉你重写类/方法并不是一个好主意。 7. 所有的变量和参数都用 final 声明 就像我说。我不相信自己不会无意间重写了某个值。

62820

调用Thread类方法:public final String getName() 为什么得到线程对象名称默认是:Thread-0、Thread-1、Thread-2、...

调用Thread类方法:public final String getName() 为什么得到线程对象名称默认是:Thread-0、Thread-1、Thread-2、...?...ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc) { //大部分代码省略了...() 方法,最终得到 Thread-0,启动线程后,再通过Thread类getName()方法得到线程对象名称。...同理,MyThread my2 = new MyThread(); 第二次调用无参构造时候,就会去父类thread 调用位无参构造,而父类无参构造是一系列init() 方法,最终得到 Thread...-1,启动线程后,再通过Thread类getName()方法得到线程对象名称。

78320

为什么我十分喜欢C,却很不喜欢C++?

同时,我也会关注现代编程语言及其发展趋势,而且我还使用 Rust 编写了自己业务爱好项目。那么,为什么我没有抛弃 C 而选择其他语言?我对于 C++看法又是如何? ?...C++编译器对C影响 实际上,C 语言当成了没有某些功能 C++。...但是,无论是标准编译器还是其他编译器中都可以看到相同方法,这些都是相关问题。...如果我知道 x86 会忽略移位偏移量高比特,在 ARM 上负左移相当于右移,那么为什么不能专门针对该体系结构编写程序?毕竟,连整数大小在不同平台上都不一样。...例如,无法使用两个不同类型指针同时操作同一块内存区域。我无法想象为什么这种行为被禁止,其原因只可能是编译器优化。这样就不可能利用联合体将整数转换成浮点数。

72310

(16) 继承细节

上节我们介绍了继承和多态基本概念,基本概念是比较简单,子类继承父类,自动拥有父类属性和行为,并可扩展属性和行为,同时,可重写父类方法以修改行为。...第一行为什么是0?...重名与静态绑定 上节我们说到,子类可以重写父类非private方法,当调用时候,会动态绑定,执行子类方法。那实例变量、静态方法、和静态变量?它们可以重名吗?如果重名,访问是哪一个?...程序输出为: base_int_long 调用还是父类方法。父类和子类两个方法类型都不完全匹配,为什么调用父类?因为父类更匹配一些。...// } public void protect(){ } } 为什么要这样规定

67690

C语言不是最好,却是我最爱~

同时,我也会关注现代编程语言及其发展趋势,而且我还使用 Rust 编写了自己业务爱好项目。那么,为什么我没有抛弃 C 而选择其他语言?我对于 C++看法又是如何?...4、C++编译器对C影响 实际上,C 语言当成了没有某些功能 C++。...但是,无论是标准编译器还是其他编译器中都可以看到相同方法,这些都是相关问题。...如果我知道 x86 会忽略移位偏移量高比特,在 ARM 上负左移相当于右移,那么为什么不能专门针对该体系结构编写程序?毕竟,连整数大小在不同平台上都不一样。...例如,无法使用两个不同类型指针同时操作同一块内存区域。我无法想象为什么这种行为被禁止,其原因只可能是编译器优化。这样就不可能利用联合体将整数转换成浮点数。

12810

偏执却管用10条Java编程技巧

这就是人们为什么喜欢进行“防错性程序设计”原因。偏执习惯有时很有意义,有时则不够清晰也不够聪明,也许当你想到这样写的人时候还会觉得有点怪异。...毕竟,我们有非常多关于NULL——价值亿万美金错误讨论。为什么不开始讨论 -1,某种意义上来说 -1 是 null 在int类型下另一种形式。 4.避免意外赋值 是的。...如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。我敢肯定重写类/方法并不是一个好主意。 7.所有的变量和参数都用final声明 就像我说。...我不相信自己不会无意间重写了某个值。这么说来,我的确一点都不相信自己。因为: ? 这也是为什么所有的变量和参数都用final声明原因。...你在编程时有哪些强迫症

74870

前端翻译:Activating Browser Modes with Doctype

如果你们希望禁止用户在使用IE8、9、10浏览你网站时,不会因点击地址栏旁兼容性按钮而导致网站以IE7文档模式解析、渲染,那么就在HTTP头那加上X-UA-Compatible: IE=Edage...IE8准标准模式         IE910提供该模式用于模拟IE8准标准模式,但在开发者工具中,该模式和IE8标准模式是合并在一起(译者语:那怎么启用准标准模式??)      ...IE9准标准模式         IE10提供该模式用于模拟IE9准标准模式,但在开发者工具中,该模式和IE9标准模式是合并在一起(译者语:那怎么启用准标准模式??)    ...(2000年夏季时,网景6推出与"strict parsing mode"关联模式,就是"Strict DTD",但因与现有网站均不兼容导致最终废除了)         另一个常见误解是关于XHTML...然后不要依赖非IE7行为特征     4.

92670

我们常用 Integer 内部为什么会去实现 Comparable 接口?

这种排序被称为类自然排序,类 compareTo 方法被称为它自然比较方法。 一、为什么需要实现这个接口?...) { System.out.print(string+";"); } 输出结果: A;B;C;D;E; 从中我们可以看出sort方法对数据中String字符串按照一定规则进行了排序,那为什么会排序...里面实现了compareTo方法,所以按照某种规则能够进行排序。 如果数组中对象不是String而是自定义类型?...建议(虽然不是必需)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致元素(或键)时,没有显式比较器有序集合(和有序映射表)行为表现“怪异”。...Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } //进行方法重写

52610
领券