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

静态方法可以重写吗?

重写(Override)作为Java的特性之一,经常被作为面试问题。 比较坑的一个问题是,子类能否重写的静态方法? 答案当然是可以的。...但是重写之后会发生什么,是否调用子类静态方法会执行子类的逻辑,这才是坑所在的地方。 重写 回顾一下Override的定义,重写是对父允许访问的方法的实现逻辑进行重新编写。...这也就证明了,静态方法是在编译时使用了编译信息,进行静态绑定的。它和对象无关,而和有关。 总结 对于静态方法,我们不应该尝试去重写,而且调用时应该以进行调用,而不是对象进行调用。...重写,说的是根据运行时的对象类型来决定调用哪个方法,而不是编译时类型。静态方法是属于方法,在编译阶段就确定了。因此即使重写了也没意义。...我们经常会用父来声明一个对象,而对象是在运行时才确定的,这就是运行时重写的意义所在。而对于静态方法的调用,虽然Java允许通过对象来调用,但只是为了开发方便,正确的姿势是通过来调用。

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

python之类的重写方法与调用父方法

下面我们来介绍一下python的重写方法与调用父方法。...---- 二、重写方法与调用父方法   在继承关系中,子类会自动继承父中定义的方法,但如果父中的方法功能不能满足需求,就可以在子类中重写方法。...1、重写方法示例 #定义一个父 class Person: def speak(self): #定义方法用于输出 print ('我是一个人类') #定义一个子类...2.子类调用父方法   如果需要在子类中调用父方法,可以使用内置函数super()或通过“父名.方法名()”的方式来实现。 例:子类调用父方法示例。...---- 三、参考 1、廖雪峰的官网 2、python官网 3、Python编程案例教程 ---- 四、总结   以上就是就是关于Python重写方法与调用父方法相关知识,可以参考一下,觉得不错的话

2.7K30

Python的继承和方法重写总结

Python的继承和方法重写总结 我们都知道可以继承,通过继承可以实现代码的复用,使代码看起来更加简洁 比如: Class B(A): Pass 定义了一个名为B的,它继承于A,我们把B叫做A的子类...方法重写 当子类定义了一个和超相同名字的方法时,那么子类的这个方法将覆盖超相同的方法(或称为重写) 先借用两个例子: >>> class Bird: ...     ...原因是SongBird的构造方法__init__()重写了,新的构造方法里没有任何关于hungry属性的代码。...通过将当前的实例作为self参数提供给未绑定方法,SongBird就能使用其超构造方法的所有实现。 Super函数 Super函数只能在新式使用。...当前和对象可以作为super函数的参数使用,调用函数返回的对象的任何方法都是调用超方法,而不是当前方法

2.8K10

Java | 、实例初始化 、方法重写规则

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 、实例初始化 、方法重写规则...②一个子类要初始化需要先初始化父 ③一个初始化就是执行()方法 ()方法由静态变量显示赋值代码和静态代码块组成。...(先执行父的()方法方法重写Override: ①不可以被重写方法: final方法 静态方法 private等子类中不可见的方法 ②对象的多态性: 子类如果重写了父方法...,通过子类调用的一定是子类重写过的方法。...Override重写的要求: 方法名一致 形参列表一致 返回值类型一致 抛出的异常列表一致 修饰符一致

14020

重写equals方法必须重写hashcode

equals方法定义在java的根Object,定义如下 public boolean equals(Object obj) { return (this == obj); } 比较的是引用...true y.equals(z) == true 则 x.equals(z) == true,x和y相等,y和z相等,则x和z相等 4.一致性 : 如果x对象和y对象有成员变量num1和num2,其中重写的...equals方法只有num1参加了运算,则修改num2不影响x.equals(y)的值 x.equals(null)必须为false 知道了equals的特性,为啥重写equals必须要重写hashcode...呢,其实这个不是语法定义,只是如果不重写hashcode在我们调用HashSet和HashMap的时候可能会造成歧义,也就是用equals方法判断的两个对象相等,但是hashcode不相等,会造成hashmap...先判断待插入结点和当前已插入结点hash值是否相等,如果相等说明同处于一个链表,然后判断两个结点key的引用是否相等 //如果引用相等,说明就是同一个值,equals必相等,如果引用不相等,则调用equals方法判断对象是否相等

1.2K20

JAVA父的静态方法能否被子类重写

静态:   在编译时所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间,在实例化之前这个方法就已经存在于内存,跟的对象没什么关系。...子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说,只是单纯的名字重复了。...父代码 1 public class Fu { 2 public static void show() { 3 System.out.println("父的静态方法"); 4..."); } } 输出结果是: 父的静态方法 子类的一般方法   当父引用指向子类对象,只会调用父的静态方法,此行为并不具有多态性!...只能说明子类能继承父的静态方法!静态方法与对象无关!

2.2K30

ES6 子类对父方法重写

子类对父方法重写的概念子类对父方法重写是指在子类中定义与父类同名的方法,并使用子类的实现来替换父方法。当子类调用该方法时,将执行子类的实现而不是父的实现。...这允许子类根据自身的需求来修改或扩展父的行为。语法ES6中子类对父方法重写的语法非常简单。在子类中,定义与父类同名的方法,并提供子类自己的实现。当子类调用该方法时,将执行子类的实现。...methodName() { // 子类方法的实现,替换了父方法实现 }}在上述代码中,ChildClass继承自ParentClass,并重写了父的methodName()方法。...然后,我们定义了一个Circle,它继承自Shape,并重写了calculateArea()方法。...当我们创建Circle的实例并调用calculateArea()方法时,将执行子类Circle的方法实现,输出圆的面积。通过重写方法,子类可以根据自身的需求来修改或扩展父的行为。

56740

python开发中重写方法有哪些?

使用面向对象继承开发时经常会遇到的一种情况,重写。继承:子类拥有父的所有属性和方法。子类继承自父,乐意直接享受父中已经封装好的方法,不需要再次开发。...应用场景:当父方法实现不能满足子类需求时,可以对方法进行重写(override)虽然Dog中有叫唤的方法,假如因为哮天犬是神犬和普通狗狗叫唤方式不一样,所以Dog中的Dark方法满足不了,这时就要对这个...重写方法有2种情况:1. 覆盖父方法2....具体的实现方式:就相当于在子类中定义了一个和父类同名的方法并且实现,重写之后,在运行时,只会调用子类中重写方法,而不再会调用父封装的方法。...----二、对父方法进行扩展如果在开发中,子类的方法实现中包含父方法实现,父原本封装的方法实现是子类方法的一部分,就可以使用扩展的方式。1.扩展的方式步骤:1. 在子类中重写方法2.

2.5K20

kotlin中数据重写setter getter的正确方法

在Kolin中,将这些统一称为数据,用关键字data标记。..., 函数名中的数字 1 到 N, 与属性的声明顺序一致, copy() 函数 如果在该数据或者基重写了以上某个成员函数,将不会再自动推断,以重写的为准。...前言 kotlin的数据,由于其内部封装了getter和setter方法,极大地简化了我们的编程代码,但同时其不能像java那样方便的重写getter或者setter方法,也给大家造成了一定的麻烦。...,但是kotlin的getter方法都是内部封装的,并不直接支持重写,我看到网上有些答案是像这样处理的: data class OrderBean(val _createTime: Long){ val...equals(),toString()等一些方法还是会沿用长整型的值,而且当你做某些值对比的时候,会产生一些不可预测的结果。

3.8K10

重写toString()方法

参考链接: 在Java中重写toString() 一个普通的,为重写toString函数之前,直接输出该类的对象,结果如下:  package blogTest; class Test{     public...每个默认继承Object对象,它里面的toString方法源码如下:   public String toString() {         return getClass().getName()...+ "@" + Integer.toHexString(hashCode());     } getClass().getName()为反射获取名称  hashCode()为本地方法,返回对象的地址值...*/ ————方法二———  利用反射重写toString方法。 ...总结:  在这里我们可以看出,使用反射重写toString方法最为麻烦,但是如果添加了新的成员变量不需要重新修改。  不过好像别人说用反射来获取成员变量或者成员方法不好,违背了的封闭性。

1.4K10

从jvm角度看懂初始化、方法重载、重写

使用java.lang.reflect包的方法进行反射调用时,如果这个还没有进行过初始化,则会触发该类的初始化。 当初始化一个时,如果其父还没有进行过初始化,则会先触发其父。...这5种行为我们称为对一个的主动引用。 初始化过程 的初始化过程都干了些什么呢? 在的初始化过程中,说白了就是执行了一个构造器()方法过程。...不过这里需要注意的是,对于来说,执行该类的clinit()方法时,会先执行父的clinit()方法,但对于接口来说,执行接口的clinit()方法并不会执行父接口的clinit()方法。...其实这也是java语言实现重载的本质 重写 我们先来看一段代码 //定义几个 public abstract class Animal { public abstract void...所以虽然指令的调用是相同的,但17行调用run方法时,此时栈顶存放的对象引用是Dog,21行则是Lion。 这,就是java语言中方法重写的本质。 本次的讲解到此结束,希望对你有所帮助。

63220

为什么在重写equals方法时都要重写equals方法

为什么在重写equals方法时都要重写equals方法呢: 首先equals与hashcode间的关系是这样的: 1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同...; 2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false) 我们没有在中里定义hashCode方法。...这里调用的仍是Object的hashCode方法(所有的都是Object的子类),而Object的hashCode方法返回的hash值其实是实例化对象的内存地址。...由于我们在中没有定义equals方法,系统就不得不调用Object的equals方法。由于Object的固有方法是根据两个对象的内存地址来判断,所以两个对象一定不会相等。...举例:hashset 和hashmap key都是对象的hashcode,但是只重写了equals而没有重写hashcode(),不同的key对应相同的value。

68321

实现的多态性,方法重写和重载

在Java语言中,通过使用方法的重载和重写实现的多态性。...2.重写(覆盖)是指父子类之间的关系,当子类继承父中所有可能被子类访问的成员方法时,如果子类的方法名与父方法名相同,那么子类就不能继承父方法,这时,称为子类的方法重写了父方法。...重写体现了子类补充或者改变父方法的能力。通过重写,可以使一个方法在不同的子类中表现出不同的行为。多态其实不依赖具体,依赖抽象和接口,接下来附上一个例子: 目录结构: ?...从上面的例子可以知道,Dog和Cat重写了父的eat()方法,所以执行的是子类的eat()方法,但是Tiger没有重写方法,所以执行的是父中的eat()方法。...4.以上就是通过方法重写和重载实现的多态性,仅供大家学习参考。

64640

JAVA中重写equals()方法的同时要重写hashcode()方法

object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法重写时...,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。...特别指出利用equals比较八大包装对象(如int,float等)和String(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址hashcode...hashcode也只用于HashSet/HashMap/Hashtable存储数据,所以会用于比较,需要重写 总结,自定义重写equals方法来进行等值比较,自定义重写compareTo方法来进行不同对象大小的比较...,重写hashcode方法为了将数据存入HashSet/HashMap/Hashtable时进行比较

1.7K60
领券