首页
学习
活动
专区
工具
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方法,比较的是值。

94030

为什么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个标准解决方法…… 这些理论、工具和数据库能够很好给企业在解决实际问题时,提供的参考和借鉴,帮助企业能够将实际问题细化分解

    34030

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

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

    6.2K10

    面试官:DTD 有什么作用?

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

    1K10

    【面试说】怪异的 JavaScript

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

    33610

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

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

    62610

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

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

    2.3K20

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

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

    63820

    搞懂 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)会被解析。

    1.1K10

    调用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()方法得到线程对象的名称。

    79220

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

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

    78610

    (16) 继承的细节

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

    69890

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

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

    17510

    我们常用的 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 + "]"; } //进行方法重写

    54410

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

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

    76370

    前端翻译: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.

    98370
    领券