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

如何在强制重写方法的同时调用super

在面向对象编程中,当一个子类继承自父类并且需要对父类的方法进行重写时,有时候我们需要在子类中调用父类的同名方法。在Java中,我们可以使用关键字"super"来实现这个目的。

具体来说,当我们在子类中重写一个方法时,可以使用"super"关键字来调用父类的同名方法。这样做的好处是可以在子类中添加额外的逻辑,同时保留父类方法的功能。

以下是一个示例代码:

代码语言:txt
复制
class Parent {
    public void method() {
        System.out.println("父类方法");
    }
}

class Child extends Parent {
    @Override
    public void method() {
        super.method(); // 调用父类的方法
        System.out.println("子类方法");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.method();
    }
}

输出结果为:

代码语言:txt
复制
父类方法
子类方法

在上述示例中,子类Child重写了父类Parentmethod方法,并在重写方法中使用super.method()调用了父类的同名方法。这样就可以在子类的方法中先执行父类的方法,然后再添加子类特有的逻辑。

需要注意的是,super关键字只能在子类中使用,用于调用父类的方法。在子类的构造方法中,可以使用super关键字调用父类的构造方法。

总结起来,使用super关键字可以在子类中调用父类的同名方法,实现方法的强制重写,并且保留父类方法的功能。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能机器学习平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/xgpush
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 腾讯云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(TBC):https://cloud.tencent.com/product/tbc
  • 腾讯云游戏引擎(GSE):https://cloud.tencent.com/product/gse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

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

1.8K60

必须同时重写hashcode和equals方法原因

在不重写这两个方法时,hashcode是内存地址计算出值,equals是用==来判断是否相同,也就是根据内存地址判断是不是相同对象。...假如我现在在开发中有一个person类,他有一些属性 :姓名 年龄 住址。而我逻辑上需要当姓名和年龄都相同时,就认为这是同一个人,也就是同一个对象。...那么肯定要重写equals方法 class Person{ String name; String sex; String address; //getter setter...然而在根据equals需要属性重写hashcode方法时,保证了equals相同,hashcode一定相同,就可以避免这种错误。...所以两个方法同时重写目的就是 要保证equals方法如果返回相同,则hashcode值一定相同

64250
  • 【Kotlin】Kotlin 类继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 接口 方法 super )

    子类重写父类方法 : 如果属性 或 方法被子类重写了 , 那么就需要使用 super 关键字调用父类属性或方法 ; 4 . super 关键字调用需要考虑情况 : ① 常用情况 : 最常用情况只使用...super 关键字进行简单调用即可 ; ② 子类内部类调用父类 : 如果想要在子类内部调用父类成员和方法 , 需要使用 super@子类名称 调用 ; ③ 子类调用不同父类同名方法 : 如果子类继承父类.../ 实现接口有相同名称属性 / 方法 , 就需要使用 super 形式调用指定 父类 / 接口方法 ; II ....子类调用父类方法 ( super ) ---- 子类调用父类方法 : 子类中可以通过 super 调用父类方法 , 包括普通方法 , 和属性访问 setter 方法 ; 其中 super 相当于父类对象引用...子类内部类调用父类方法 ( super@ ) ---- 子类内部类调用父类方法 : 在子类内部类中 , 如果想要访问父类方法 , 可以使用 super@子类名称.父类方法() 形式 , 调用父类方法

    1.5K10

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

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

    2.7K30

    python调用父类方法三种方式(super调用和父类名调用

    子类调用父类方法三种方式:父类名.方法名(self)super(子类名,self).父类方法名()super().父类方法名注意:super()通过子类调用当前父类方法super默认会调用第一个父类方法...默认会调用第一个父类方法(适用于单继承 或者只想使用第一个父类方法) # 02 方式 适用于新式类 # 格式: super(子类类名, self).父类方法名()...#这意味着,在创建对象xiaobai时,其将会调用从People类继承来构造函数,因此上面程序创建xiaobai对象同时,还要给name属性进行赋值。...针对这种情况,正确做法是定义Person类自己构造方法(等同于重写第一个直接父类构造方法),但是需要注意是,在子类中定义构造方法,则必须在该方法调用父类构造方法。...未绑定方式使用super()函数,但如果涉及多继承,该函数只能调用第一个直接父类构造方法

    1.1K20

    dotnet 多线程禁止同时调用相同方法 禁止方法重入调用 双检锁设计

    大家在使用多线程时候,是否有关注过线程安全问题。如果咱代码在使用多线程时,在相同时间有多个线程同时执行相同方法,此时也许就存在数据安全问题,多个线程之间对相同内存进行同时读取和修改。...而让方法在多线程调用中,相同时间会被多个线程同时执行某段代码逻辑技术称为方法重入调用技术,而禁止方法同时调用也就是禁止方法重入调用。...在 dotnet 里面有多个方式可以做到禁止方法重入调用,本文将告诉大家如何做到禁止方法重入调用 执行代码逻辑重入是一个很泛领域,本文仅仅只和大家聊多线程同时执行某段代码逻辑时重入 在开始之前,我需要告诉大家...上面方法在使用 lock (_locker) 可以让方法里面的代码只有一个线程同时执行,此时对 _isDoing 读取和修改将会是线程安全,因此可以通过此判断而解决重入问题 但上面方法因为默认需要进入...但是没关系,因为后续会进入 lock (_locker) 然后再次判断,这就是 双检锁 这个名字原因了 而大家所见,上面代码复杂度确实比较高,也需要占用两个本地字段。

    92310

    关于使用MethodHandle在子类中调用祖父类重写方法探究

    关于使用MethodHandle在子类中调用祖父类重写方法探究 注:这个例子原本出现在周志明先生《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...关于这段代码,可以简单理解findSpecial方法是为了找到方法,invoke是为了调用方法。...在普通方法调用中,这个this参数是虚拟机自动处理,表示是当前实例对象,我们在方法中可以直接使用。...但是在我们这个MethodHandle例子中,相当于是模拟了invoke*指令处理,手动调用invoke方法就需要指定这个"this"参数。...基于这个事实,我们这时可以直接在GrandFatherthinking方法调用Son类独有的方法,使用反射或者直接类型强制转换为Son就行了。

    9.5K30

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

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

    6.2K10

    Java基础入门笔记05——面向对象,创建对象内存分析,继承,封装,多态,object类,this&&super方法重写,引用类型强制转换,instanceof,抽象类,内部类,接口,异常。[通

    此时子类在写super()去调用父类无参构造就会报错了,所以一般情况:如果重写了父类有参构造,一定要记得加上一个无参构造。...---- super小节 如果要使用super调用父类构造方法,必须在本类构造方法第一句 super只能出现在子类方法中或者子类构造方法中,且为第一句,如果在父类中使用super其实是指代object...类 super和this不能同时调用 super&&this super代表父类对象引用,this代表本身这个对象 this在没有继承时也能使用,super只有在继承条件下才能使用(在子类中使用) this...()调用本类构造方法super()调用父类构造方法 ---- 方法重写 这里主要指:继承父类之后,对父类方法重写方法调用只和左边有关,打错字了[doge]) 解释:调用对象方法时,这个方法到底是用父类方法...) 若把父类转化为子类,向下转型,强制 多态是为了方便方法调用,减少重复代码 ---- static关键字 修饰属性——静态属性 public class Student { private

    99020

    关于Java构造函数(Constructor)常见问题总结1 为什么调用子类构造方法时候,默认会调用父类构造方法2 常见错误:Implicit super constructor is und

    1 为什么调用子类构造方法时候,默认会调用父类构造方法 看下面这个简单例子: package cc; public class Sub extends Super { public Sub...Paste_Image.png 当继承自一个类时候,构造方法就会首先调用super()方法。如果没有显式写这个语句,那么编译器就会自动插入这个语句。...这就是为什么我们上面的那个例子程序会先调用super构造方法。 但要切记,** 虽然调用了父类构造方法,但只创建了一个对象也就是子对象。...** 之所以要调用父类构造方法,是因为super类可能需要构造函数来初始化一些私有的成员变量。...上一小节,我们知道,如果子类构造函数中,没有显示调用父类构造函数,那么,编译器就会插入super(),也就是自动调用无参构造函数。但是此时,父类没有无参构造函数,所以就会报错了。

    2.9K41

    Java易错知识点总结(三)

    final修饰变量是一个常量,只能被赋值一次 6.super关键字 super用法: 当子类和父类出现同名成员时,可以用super进行区分 子类调用父类构造函数时,可以使用super语句...由于子类不继承父类构造方法,因此,子类在其构造方法中需要使用super调用父类构造方法。...: 在同一个构造函数中this()和super()能不能同时出现?   ...args[]){ A xx=new B(); xx是B对象上转型对象 xx.f(); } }  子类上转型对象只能调用重写方法,不能调用子类新增方法  把上转型对象强制转化为子类对象...,不能调用子类新增方法 Cat yy=(Cat)xx; 把上转型对象强制转化为子类对象 yy.f("子类对象"); } } 输出结果为: Cat中f方法上转型对象 Cat中f方法子类对象

    22520

    Java基础小结(二)

    2、但如果子类覆盖或重写了父类方法,则只有使用 super 才能在子类中调用父类中重写方法。 this 关键字 this 关键字表示当前对象。...可用于: 1、调用当前类构造方法,并且必须是方法第一条语句。:this(); 调用默认构造方法。this(参数); 调用带参构造方法。 2、限定当前对象数据域变量。...但是,重写方法不能抛出新强制性异常,或者比被重写方法声明更广泛强制性异常,反之则可以。 构造方法不能被重写。 如果不能继承一个方法,则不能重写这个方法。...要想调用父类中被重写方法,则必须使用关键字super。...重写接口中声明方法时,需要注意以下规则: 类在实现接口方法时,不能抛出强制性异常,只能在接口中,或者继承接口抽象类中抛出该强制性异常。

    67910

    java学习与应用(2)--面向对象

    public class Child extends Parent{} 子类继承了父类方法,重名变量和方法使用就近原则,方向为向父类方向查找。super关键字,在子类中调用父类成员变量,方法。...子类中构造方法,自动隐含super()父类无参数构造方法,有参数父类构造方法手工写入调用并自动替换无参父类构造方法,父类构造方法只在子类构造方法使用调用。...说明总结,super用于父类访问,this用于本类访问。this和super构造调用不能同时使用。 构造方法问题 ?...对象向下转型,将父类对象还原为本来子类对象。向下转型使用小括号,类似强制转换。 多态使得设计过程中,将多个不同对象,转换为其公共父类对象,调用各自子类同名方法,自动实现向上转型,调用向下。...内部类外部类又相应要求,public 、default等 匿名内部类:接口实现类只使用一次,则不需要单独定义。 接口 变量 = new 接口{},添加内部重写方法。然后调用

    53030

    JAVA面试必备知识(基础篇)

    为什么在重写 equals 方法时候需要重写 hashCode 方法?...因为有强制规范指定需要同时重写 hashcode 与 equals 是方法,许多容器类, HashMap、HashSet 都依赖于 hashcode 与 equals 规定。...;接口在JDK8之前不能有静态方法,在JDK8中可以有静态方法,且只能被接口类直接调用(不能被实现类对象调用)抽象类中方法可以是public、protected; 接口方法在JDK8之前只有public...abstract,在JDK8可以有default方法,在JDK9中允许有private方法6、this() & super()在构造方法区别?...调用super()必须写在子类构造方法第一行, 否则编译不通过super从子类调用父类构造, this在同一类中调用其他构造均需要放在第一行尽管可以用this调用一个构造器, 却不能调用2个this和

    66230

    多态易错题

    由于子类中重写了父类中sayName方法,所有父类构造器中调用sayName方法其实会执行子类中sayName 子类属性显式赋值是在调用完父类构造器之后进行 所以父类构造器中调用子类中...1.类加载,同时初始化类中静态属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类非静态属性显示赋值...(但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。) 好了,先温习到这里,言归正传!...实际上这里涉及方法调用优先问题 ,优先级由高到低依次为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。...方法重写注意事项 方法重写:指在子类中重新定义父类中已有的方法 注意事项:重写方法必须和被重写方法具有相同方法名称、参数列表和返回值类型(返回值类型可以是不一样,但是要有is-a关系)

    62620

    Java程序设计(面向对象)- 三大支柱「建议收藏」

    调用子类 方法重写:在子父类当中,子类方法和父类完全一样,子类重写了父类方法(覆盖),当子类重写了父类方法之后,使用子类对象调用就是子类方法 例如: package com.itxbj..._01; /* * 继承中成员方法特点 * 子类中没有这个方法调用父类 * 子类中重写了这个方法调用子类 * 方法重写:在子父类当中,子类方法和父类完全一样,子类重写了父类方法(覆盖)...:当父类方法不能完全满足子类使用,这个时候子类重写父类方法, * 并可以在方法中使用关键字super调用父类方法,这样做即可以保有父类功能,也可以拥有子类特有的功能 * 方法重写注意事项: *...super:子类对象父类引用 调用父类成员变量 调用父类成员方法 在子类构造方法第一行调用父类构造方法 */ public class ExtendsDemo7 { public...使用格式: 父类类型 变量名 = new 子类类型(); :Person p = new Student(); 向下转型:一个已经向上转型子类对象可以使用强制类型转换格式,将父类引用转为子类引用

    28421

    1.8 封装、继承、多态

    构造方法作用是初始化成员变量。所以子类初始化过程中,必须先执行父类初始化动作。子类构造方法中默认有一个super() ,表示调用父类构造方法,父类成员变量初始化后,才可以给子类使用。...成员方法重名——重写(Override) 如果子类父类中出现重名成员方法,需要进行方法重写(Override)。 方法重写 :子类中出现与父类一模一样方法时,需要重写父类方法。...this :代表当前对象引用(谁调用就代表谁)。 特点: 子类每个构造方法中均有默认super(),调用父类空参构造。 手动调用父类构造会覆盖默认super()。...super() 和 this() 都必须是在构造方法第一行,所以不能同时出现。 6、继承特点 Java只支持单继承。 三、多态 1、概述 多态: 是指同一行为,具有多个不同表现形式。...父类类型 变量名 = new 子类类型(); :Animal a = new Cat(); 向下转型:父类类型向子类类型向下转换过程,这个过程是强制

    18510

    Java学习笔记——面向对象编程(核心)

    要求 重写方法必须和被重写方法具有相同方法名称、参数列表和返回值类型。 重写方法不能使用比被重写方法更严格访问权限。 重写和被重写方法同时为static,或同时为非static。...无法调用子类中添加方法 ((B)a).bFunc(); // 强制类型转换(向下转型) 个人总结 继承或实现(implement) 重写(override) 子类对象赋给父类指针 编译时类型...(声明类型,决定能调用哪些方法)和运行时类型(实际赋值类型,决定调用是哪个类方法) 即使运行时为子类类型,编译时也不能通过父类指针访问子类中有但父类中没有的方法,可通过强制类型转换将其转为子类类型...可以调用属性、方法、构造器(构造器相互调用,使用this()必须放在构造器首行)。 super super可用于访问父类中定义属性、成员方法,在子类构造方法调用父类构造器。...static方法内不可以有this或super关键字 static方法即使被重写,也不能通过父类指针(多态)访问到子类重写static方法

    40620

    Java入门必背100条

    58、super调用属性、方法: ①在子类方法或构造器中,通过使用”super.属性”或”super.方法方式,显式调用父类中声明属性或方法,通常情况下,习惯省略”super.”。...③特殊情况:当子类重写了父类中方法以后,想在子类方法调用父类中被重写方法时,则必须显式使用”super.方法方式,表明调用是父类中被重写方法。...2 “super(形参列表)”使用,必须声明在子类构造器首行! 3 我们在类构造器中,针对于”this(形参列表)”或”super(形参列表)”只能二一,不能同时出现。...⑤如何在子类(或实现类)方法调用父类、接口中被重写方法。...public void myMethod(){ method3();//调用自己定义重写方法 super.method3();//调用是父类中声明 //调用接口中默认方法

    1K20
    领券