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

从重写子类方法中调用超类方法

是指在子类中重写父类的方法,并在子类方法中调用父类方法,以保留父类方法的功能并添加额外的功能。

在Java中,可以使用关键字super来调用父类的方法。super关键字可以用于调用父类的构造方法、实例方法和静态方法。

调用父类的实例方法:

代码语言:txt
复制
public class ParentClass {
    public void print() {
        System.out.println("ParentClass");
    }
}

public class ChildClass extends ParentClass {
    @Override
    public void print() {
        super.print(); // 调用父类的print方法
        System.out.println("ChildClass");
    }
}

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

输出结果:

代码语言:txt
复制
ParentClass
ChildClass

调用父类的构造方法:

代码语言:txt
复制
public class ParentClass {
    public ParentClass() {
        System.out.println("ParentClass");
    }
}

public class ChildClass extends ParentClass {
    public ChildClass() {
        super(); // 调用父类的构造方法
        System.out.println("ChildClass");
    }
}

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

输出结果:

代码语言:txt
复制
ParentClass
ChildClass

调用父类的静态方法:

代码语言:txt
复制
public class ParentClass {
    public static void print() {
        System.out.println("ParentClass");
    }
}

public class ChildClass extends ParentClass {
    public static void print() {
        super.print(); // 调用父类的静态方法
        System.out.println("ChildClass");
    }
}

public class Main {
    public static void main(String[] args) {
        ChildClass.print();
    }
}

输出结果:

代码语言:txt
复制
ParentClass
ChildClass

这种调用父类方法的方式可以在子类中扩展父类的功能,同时保留父类方法的原有逻辑。在实际应用中,可以根据具体的业务需求来决定是否需要调用父类方法。

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

相关·内容

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

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

6.1K10

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

关于使用MethodHandle在子类调用祖父重写方法的探究 注:这个例子原本出现在周志明先生的《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...这里直接看Son的thinking方法(关于为何这样实现,在《深入理解Java虚拟机》读书笔记(七)--虚拟机字节码执行引擎(下)也解释了)。...在普通的方法调用,这个this参数是虚拟机自动处理的,表示的是当前实例对象,我们在方法可以直接使用。...基于这个事实,我们这时可以直接在GrandFather的thinking方法调用Son独有的方法,使用反射或者直接类型强制转换为Son就行了。...这个参数中指定的是方法接收者的类型,bindTo指定的接收者的类型必须要是这个子类,不然会出现ClassCastException异常。

9.4K30

Python实现子类调用方法

Person,但是并没有调用的__init__()方法,那么怎样调用方法呢?...有如下两种解决方案: 方法一:调用未绑定的父构造方法 class Person(object): def __init__(self): self.name = "Tom"...: return self.age if __name__ == "__main__": stu = Student() print stu.getName() 这种方法叫做调用的未绑定的构造方法...在调用一个实例的方法时,该方法的self参数会被自动绑定到实例上(称为绑定方法)。但如果直接调用方法(比如Person.__init__()),那么就没有实例会被绑定。...方法一更直观,方法二可以一次初始化所有. super函数比在累中直接调用未绑定方法更直观,但是其最大的有点是如果子类继承了多个父,它只需要使用一次super函数就可以。

3.1K10

Python_子类调用方法

1.方式一 子类调用方法,包含2形式的调用。一种形式是在内部通过继承的方式调用方法,另外一种形式是子类实例化后之后通过继承的方式来调用方法。如下图所示: ?...#子类调用方法 Person.eat(self) #子类调用方法必须要传self #实例化一个子类 student = Student("周明",23,'男',"11届土木...3班") #调用子类本身的方法 student.course() #通过子类调用方法--->实例化之后来调用方法 student.eat() #调用子类方法,在子类方法调用子类方法,...使用super的好处,一是可以代替父名,这样后期父名更改了,我们只需要更改子类名称后面的父名即可,子类其他的父名可以不用更改;二是使用了super后,调用方法时可以不传参数self。..."11届土木3班") #调用子类本身的方法 student.course() #通过子类调用方法--->实例化之后来调用方法 student.eat() #调用子类方法,在子类方法调用子类方法

4.8K20

ES6 子类对父方法重写

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

56340

Java的静态方法不能被子类重写

参考链接: 可以在Java重载或重写静态方法吗 Java的静态方法不能被子类重写 特点:静态方法属于方法,也属于对象的方法,但是静态方法的存在。...结论:Java的静态方法不能被子类重写,实际上,子类的静态方法隐藏了父的静态方法,因此父子类的静态方法同时存在,只不过父通过名(或对象名)调用的是父的静态方法子类通过名(或对象名)调用的是子类的静态方法...,不支持多态,所以此处调用的父的静态方法         f1.doWork();            // 非static(静态)方法调用,支持多态         System.out.println...(final,private 方法也如此) (2)静态方法可通过名直接调用,也可通过的实例化对象调用,因此Father 的实例化对象f1调用的是父(不是子类)的静态方法。...,不支持多态,所以此处调用的父的静态方法         f1.doWork();            // 非static(静态)方法调用,支持多态         System.out.println

2.1K20

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

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

2.6K30

子类调用的同名方法和属性

Python面向对象,利用子类调用的同名方法和属性。...首先我们定义了两个父,Master和School # @author: 北山啦 # FileName: 12子类调用的同名方法 # @time: 2022/6/5 14:54 #父Master...,子类如何来调用呢 在这里,定义Prentice,继承了Master和School,添加了和父类同名属性和方法 调用子类的属性和方法 如果调用了父的属性和方法,父类属性会自动掩盖子类属性,股灾调用属性前...__init__ print(f'运用{self.kongfu}制作煎饼果子') 调用父类属性和方法 如果调用方法,但是为了保障调用到的是父的属性,必须在方法调用的初始化...__init__ print(f'运用{self.kongfu}制作煎饼果子') '''调用方法,但是为了保障调用到的是弗列的属性,必须在方法调用的初始化'''

1.8K20

【Python】面向对象 - 继承 ② ( 子类重写成员 | 子类调用重名成员 | 子类中使用 父调用成员 | 子类中使用 super 调用成员 )

一、子类重写成员 1、子类重写成员语法 子类 继承 父的 成员属性 与 成员方法 后 , 如果对 继承的 父成员 不满意 , 可以 重写成员 ; 成员 属性 和 成员 方法 , 都可以进行重写...; 成员属性 重写 , 就是在 子类 , 修改 成员属性的值 ; 成员方法 重写 , 就是在 子类 , 修改 成员方法方法体内容 ; 在子类 , 如果需要重写的成员 , 直接在子类 ,...- 子类重写成员 在父 Animal , 定义了 成员属性 name 和 age , 成员方法 make_sound 函数 ; 在子类 Dog , 对 父 Animal 的 成员属性 name...1、子类调用重名成员语法 在 外部 是无法访问 父成员 : 子类 重写 成员后 , 通过 子类 实例对象 调用重写后的 成员时 , 默认调用的就是 重写后的成员 ; 在 子类内部 可以...) 2、代码示例 - 子类中使用 父调用成员 在 Dog 子类的 make_sound 函数 , 通过 Animal.name 和 Animal.age 可以调用的成员变量 , 打印出来的值为父的成员变量值

36630

C# 判断方法是否被子类重写

本文告诉大家如何通过反射判断某个方法是否被基重写 在 C# 如果在定义 virtual 的方法,那么可以在子类重写,如何判断一个方法子类可以通过反射 例如创建一个 Foo 定义 Test 虚方法...,如果是可以拿到 Foo 对象,通过调用 GetType() 方法可以获取对象的 在 Foo 写 IsOverride 用来判断 Test 方法是否被重写 public bool IsOverride...() { } } 运行下面代码可以看到 F1 输出的是重写方法 static void Main(string[] args)...= methodInfo.GetBaseDefinition()) { // 重写 } 判断是否重写方法需要使用反射,性能会比较低...因为是不能运行时修改的,所以只需要获取就可以知道是否重写 本文代码放在 github 欢迎小伙伴访问 Detect if a method was overridden using Reflection

36430

Python - 面向对象编程 - 子类方法重写

继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 方法重写子类继承父时,子类会拥有父的所有属性和方法 但当父方法实现不满足子类需要时...,子类可以对方法进行重写,也叫 override 重写方法的两种情况 覆盖父方法 对父方法进行扩展 方法重写图 Chai 继承了 Dog 重写了 wang 方法 覆盖父方法 在开发...,父方法子类方法功能不同,就可以使用覆盖的方式,在子类重新编写父方法 相当于在子类定义一个和父类同名的方法并且实现子类特有的功能 重写后,在运行时,只会调用子类重写方法,而不再会调用封装的方法...wang 方法,而不是父的 wang 方法 对父方法进行扩展 在开发子类方法实现需要包含父方法,就可以使用扩展方式 如何扩展 在子类重写方法子类方法需要调用方法的地方,通过...def wang(self): # 1、针对子类特有的需求,编写子类独有的代码实现 print("柴犬小声的汪汪叫") # 2、调用方法

71920

python中子类调用的初始化方法

如果一个方法子类的实例中被调用,或者一个属性在子类的实例中被访问,但是该方法或属性在子类并不存在,那么就会自动的去其父中进行查找。...子类不显式调用的构造方法,而父构造函数初始化了一些属性,就会出现问题 如果子类和父都有构造函数,子类其实是重写了父的构造函数,如果不显式调用构造函数,父的构造函数就不会被执行,导致子类实例访问父初始化方法初始的变量就会出现问题...,构造函数被重写,但新的构造方法没有任何关于初始化父的namea属性的代码,为了达到预期的效果,子类的构造方法必须调用其父的构造方法来进行基本的初始化。...方法一更直观,方法二可以一次初始化所有 super函数比在累中直接调用未绑定方法更直观,但是其最大的有点是如果子类继承了多个父,它只需要使用一次super函数就可以。...但是假如子类自己重写 了(也成为覆盖)父的__init__()方法,那么就需要显式的调用的初始化方法了。有两种方法可以做到:      1:ParentClass.

2.1K10

子类继承父重写的synchronized方法,两个synchronized方法的锁对象的问题

参考链接: 用子类引用子类对象 vs 父引用 这是java并发编程实践中有关重入概念的介绍时产生的问题  public class Widget {       public synchronized...,重写的synchronized方法,两个synchronized方法的锁对象的问题  是同一个锁还是不同锁呢,是同一个锁的话是  父对象作为锁还是子类对象作为锁呢? ...以下是我别的地方找到的检验代码,可以确定上述问题  public class Test {   public static void main(String[] args) throws InterruptedException...something else  说明肯定是同一对象  另外main方法里最后那步执行的对象是子类,按着定义,谁调用方法谁作为锁,所以这个一定是子类对象,那么super.doSomething()这个方法一定也是子类对象...,至于理解么:  可以认为即便是继承创建了父对象,并把父对象的引用交给了子类,但是在super.去调用方法的时候JVM认为调用者依然是子类

1.7K20

Python 在子类调用方法详解(单继承、多层继承、多重继承)

测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、在子类通过“名”调用方法 class FatherA: def __init__(self)...__init__(self) # 在子类调用方法:父名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(如SubClassB的父由FatherA变为FatherD时),必须遍历整个定义,把子类中所有的父名全部替换过来 2、在子类通过“super”方法调用方法 场景1、单层继承 class...__init__() # 在子类调用方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...,继承多个父,以super().method(参数)方法调用方法,如果不同父存在同名方法method(不管参数列表是否相同),则按继承顺序,选择第一个父方法

2.9K30

【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

文章目录 的继承 方法重写 子类调用方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 的继承 ---- 1....外部通过子类调用方法 : 如果调用方法子类没有重写 , 那么调用的就是父方法 ; //在栈内存创建一个 Child 对象, 并调用重写的父方法 Child child; //...子类调用方法 ---- 1....执行下面的代码 : 执行该子类实现的方法 , 该方法先后调用了两个父方法 ; //在栈内存创建一个 Child 对象, 并调用重写的父方法 Child child; //调用子类重写的父方法...调用上述方法 : //在栈内存创建一个 Child 对象, 并调用重写的父方法 Child child; //调用子类重写的父方法 child.parent_method();

86720

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

这5种行为我们称为对一个的主动引用。 初始化过程 的初始化过程都干了些什么呢? 在的初始化过程,说白了就是执行了一个构造器()方法过程。...实际上,clinit()方法是由编译器自动收集的所有变量的赋值动作和静态语句块(static{}块)的语句合并产生的,编译器收集的顺序则是由语句在源文件中出现的顺序来决定的。...下面,我们举例几个被动引用的例子: 通过子类引用父的静态字段,不会触发子类的初始化 /** * 1.通过子类引用父的静态字段,不会触发子类的初始化 */ public class FatherClass...17和21是run()方法调用指令。 指令可以看出,这两条方法调用指令是完全一样的。可是最终执行的目标方法却并不相同。这是为啥?...所以虽然指令的调用是相同的,但17行调用run方法时,此时栈顶存放的对象引用是Dog,21行则是Lion。 这,就是java语言中方法重写的本质。 本次的讲解到此结束,希望对你有所帮助。

62920

构造函数调用子类方法,写过吗?

为什么Base的构造函数与虚构函数即使调用虚函数,也是调自己的函数呢?这跟构造函数与虚构函数的调用顺序有关。子类对象构造的时候,先调父构造函数初始化父,再调子类构造函数初始化子类。...子类对象虚构的时候,恰恰相反,先调子类对象的虚构函数,再调父的虚构函数。输出的结果也证明了这点。 所以如果父的构造函数与虚构函数是调用子类的函数,那就非常危险了。...因为父的构造函数执行时,子类的构造函数还没有执行,说明子类还没有初始化,而这时就调用子类方法,很容易出错,甚至崩溃。...父的虚构函数执行的时候,子类的虚构函数已经执行完毕,说明子类的资源已经被释放,而这时继续执行子类方法,也很容易崩溃。于是,C++规范为此作了此约束。...如果真的很想在构造函数内调用子类方法进行初始化,还是显示提供一个初始化函数,让子类对象实例化完后,显示调用初始化函数。

1.4K20
领券