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

是否可以在被别名的方法中调用super来调用别名方法

在面向对象编程中,特别是在使用JavaScript这样的动态类型语言时,super关键字用于调用父类(超类)的方法。当你在子类中重写一个方法,并且想要在该方法中调用父类的同名方法时,可以使用super

基础概念

  • 方法别名:指的是给一个方法起一个额外的名字,通常是为了兼容性或代码可读性的考虑。
  • super关键字:在子类中调用父类的方法时使用。

是否可以在被别名的方法中调用super来调用别名方法?

不可以。super关键字只能用来调用父类中的原始方法,而不是别名。这是因为super的工作方式是基于方法解析顺序(Method Resolution Order, MRO)的,它总是指向原始的方法定义。

示例代码

假设我们有一个父类Parent和一个子类Child,在子类中我们想要调用父类的一个被别名的方法:

代码语言:txt
复制
class Parent {
  originalMethod() {
    console.log('This is the original method.');
  }
}

class Child extends Parent {
  constructor() {
    super();
    this.aliasForOriginalMethod = this.originalMethod.bind(this);
  }

  // 尝试在子类中调用别名方法
  callAlias() {
    // 这里会报错,因为super不能调用别名方法
    // super.aliasForOriginalMethod(); // 错误的用法

    // 正确的用法是直接调用原始方法
    super.originalMethod();
  }
}

const childInstance = new Child();
childInstance.callAlias(); // 输出: This is the original method.

解决方法

如果你需要在子类中调用父类的一个被别名的方法,你应该直接调用那个别名,而不是尝试使用super来调用它。例如:

代码语言:txt
复制
class Child extends Parent {
  constructor() {
    super();
    this.aliasForOriginalMethod = this.originalMethod.bind(this);
  }

  callAlias() {
    // 直接调用别名方法
    this.aliasForOriginalMethod();
  }
}

const childInstance = new Child();
childInstance.callAlias(); // 输出: This is the original method.

在这个例子中,我们通过this.aliasForOriginalMethod()直接调用了别名方法,而不是尝试使用super来调用它。

总结

  • super只能用来调用父类的原始方法。
  • 如果你需要调用一个别名方法,应该直接使用该别名。
  • 在设计类和方法时,应该清楚地考虑方法的命名和别名的使用,以避免混淆和错误。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

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

1.1K20

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

子类调用父类 : 子类可以任意调用父类的 public , protected 可见性的属性与方法 ; 3 ....子类调用父类方法 ( super ) ---- 子类调用父类方法 : 子类中可以通过 super 调用父类的方法 , 包括普通方法 , 和属性访问的 setter 方法 ; 其中的 super 相当于父类对象的引用...子类内部类调用父类方法 ( super@ ) ---- 子类内部类调用父类方法 : 在子类的内部类中 , 如果想要访问父类的方法 , 可以使用 super@子类名称.父类方法() 的形式 , 调用父类的方法...子类选择性调用父类 / 接口方法 : 子类可以继承父类 , 实现多个接口 , 如果父类与接口 , 或者不同的接口之间定义了相同名称的方法 , 那么需要使用 super.方法名() 选择调用指定的...代码示例 : 代码中定义了一个父类 Father , 接口 Build , 父类和接口 都定义了 action 方法 , 子类 Son 继承父类 , 实现 Build 接口 , 子类通过 super 调用父类中的成员或方法

1.6K10
  • currentThread()方法可返回代码段正在被哪个线程调用的信息

    currentThread()方法   currentThread()方法可返回代码段正在被哪个线程调用的信息。...: 之后是run()中的代码结果,当前线程名字为A,A是我们手动赋予的c.setName("A");,并且它是运行着的。...run()方法前的代码没什么好说的。在run()中的代码结果表示,this 与 Thread.currentThread()不是同一个引用。...将线程对象以构造参数的方式传递给Thread对象进行start()启动线程,我们直接启动的线程实际是newThread(即t1),而作为构造参数的c线程对象,赋给Thread类中的属性target,之后在...Thread的run方法中调用target.run(); 此时Thread.currentThread()是Thread的引用newThread, 而this依旧是c的引用,所以是不一样的,打印的内容也不一样

    55800

    Java中的RMI(远程方法调用)

    参考链接: Java中的远程方法调用RMI RMI基本概念  RMI(Remote Method Invocation,远程方法调用)是从java1.1开始实现的,它大大增强了Java开发分布式应用的能力...RMI对接口有着强烈的依赖,在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,所以客户得到远程对象的一个句柄时,它们真正得到的是接口句柄,然后本地代码通过接口操作远程对象。...通过RMI编写程序可以非常方便的实现分布式Java应用程序。 ...实例  编写基本的,要被传输的bean对象(Person),这个对象可以是基本数据类型或者实现了java.io.Serializable的自定义类型。 ...rand.nextInt(names.length)]);             list.add(p);         }         return list;     } }  如何运行  命令行中运行的方法

    1.6K30

    vue调用js文件_vue调用其他js文件中的方法

    本文主要介绍了vue引用js文件的多种方式,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1、vue-cli webpack全局引入jquery (1) 首先 npm...'), new webpack.ProvidePlugin({ jQuery: "jquery", $: "jquery" }) ] (4) 在main.js 引入就ok了 (测试这一步不用也可以...) import $ from 'jquery' (5)然后 npm run dev 就可以在页面中直接用$ 了. 2、vue组件引用外部js的方法 项目结构如图: content组件代码: 方法 (1) 首先 npm install jquery –save (–save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖...(){ console.log($) } } 就不会有了,原因可能是得符合vue中js的写法吧 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    18.9K50

    Java中静态方法不能调用非静态方法的原因

    如图,是Java中静态代码和实例对象互相调用的规则,我们接下来就讲讲为什么在Java中静态方法不可以调用非静态代码呢。...静态方法不依赖于对象的调用,它是通过‘类名.静态方法名’这样的方式来调用的。而对于非静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问非静态方法。...经过查资料和某人的帮助,终于明白啦。 (1)首先,我们可以试一下去掉static,这里不会编译错误,但是运行时会抛出空指针异常,原因是什么呢,原因就是类似于上面说的静态方法不能调用非静态方法的原因了。...(2)这里用null的话(即(Test)null)是将Test引用强制转换为Test对象,这样也可以调用静态方法,其实不需要null,也是可以调用静态方法的,即Test.Print()。...(3)不能用一个值为null的引用类型变量来调用非静态方法,这样会抛出空指针异常,但是静态方法可以被一个值为null的引用类型变量调用而不会抛出空指针异常。

    5.6K50

    动态调用类中的方法(无)(有)参数

    1、Type类,方法用Invoke调用的时候就 使用null:表示该方法是无参数的 2、Type类,方法用Invoke调用的时候就 使用new object[] { "肖名" }传递参数:表示该方法是有参数的...System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace 动态调用类中的方法...= tp.GetMethod("Say");//2、调用这个类中的Say方法,,注意:没有参数!!!...(obj, null); // 当在派生类中重写时,调用具有给定参数的反射的方法或构造函数。...////5、也就是说,调用的方法Say(),是没有参数的,那么在用Invoke调用的时候就 使用null:表示该方法是无参数的 ////3、先写上一个括号,发现,第一个参数是object

    2.6K20

    Spring MVCD框架中调用HanLP分词的方法

    封面.jpg 项目里有一个文本分析的模块是一个同学用hanlp写的,由于在最后集成的时候直接使用maven添加的依赖,但最终测试时无法通过。...后经分析发现她坐了实体识别,是自己改了hanlp的词典,手动加了很多词,而且在后期版本的迭代中还有可能继续改了hanlp的词典,这就意味着不能用maven直接导入仓库里的包了,只有将修改后的data文件放到本地...网上有一些解决的方法,但都是在项目部署的时候,把hanlp的词典数据放到服务器上一个固定位置上,然后再配置hanlp的配置文件,指定一个固定位置。...这种方法虽然比较直接,但是并不能够把hanlp的词典数据与整个项目打包到一起,后期的管理也比较麻烦。...在一个将词典数据放到HDFS上的一个blog启发下,尝试通过重写一个IOAdapter类,使用读写静态资源文件的方法读取词典数据了,这样不就可以把data跟项目打包到一起了。

    77550

    关于加@Transactional注解的方法之间调用,事务是否生效的问题

    不同类之间的方法调用,如类A的方法a()调用类B的方法b(),这种情况事务是正常起作用的。只要方法a()或b()配置了事务,运行中就会开启事务,产生代理。...同一个类内方法调用:重点来了,同一个类内的方法调用就没那么简单了,假定类A的方法a()调用方法b() 同一类内方法调用,无论被调用的b()方法是否配置了事务,此事务在被调用时都将不生效。...另一个例子:方法a()配置了事务,此时b()的事务虽然不生效,但a()的事务生效,对于b()中抛出的异常也会回滚。...,因此调用a()方法的对象是动态代理对象。...而在类内部a()调用b()的过程中,实质执行的代码是this.b(),此处this对象是实际的serviceImpl对象而不是本该生成的代理对象,因此直接调用了b()方法。

    7.2K40

    Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    、运行结果 总结 前言 在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中的修饰符来访问类中定义的非私有方法。...但是如果需要在其他类调用私有的方法,就可以利用 Java 中提供的反射来实现。...一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 说明:被 private 关键字修饰的构造方法、方法或者数据域只在其所在的类中可见。...(); } } 1.2、尝试在其他类直接调用私有方法(错误示范) 如果我们直接在其他的类中实例化 Demo 类,来直接调用 demo() 方法,就会发现 IDE 直接产生编译错误,很明显我们直接在另一个类中调用私有方法是行不通的...我们通过实例化Method类来调用Method类中的方法,常用方法有以下几个: getMethods():获得类的 public 类型的方法 getMethod(String name, Class[]

    2.4K21

    【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )

    文章目录 一、闭包中调用 Groovy 脚本中的方法 二、owner 与 delegate 区别 三、闭包中调用 Groovy 对象中的方法 一、闭包中调用 Groovy 脚本中的方法 ---- 在 Groovy...脚本中 , 在 Closure 闭包中 , 可以直接调用 Groovy 脚本中定义的方法 ; def fun() { println "fun" } def closure = {..., 这是无法改变的 ; 但是 Closure 闭包对象的 delegate 成员是可以修改的 ; 三、闭包中调用 Groovy 对象中的方法 ---- 在闭包中 , 可以直接调用 Groovy 脚本中定义的方法...; 但是如果想要在闭包中 , 调用实例对象的方法 , 就必须设置闭包的 delegate 成员 ; 如下代码中 , 想要在闭包中 , 调用 Test 对象的 fun 方法 , 在执行闭包之前 , 必须将...} } // 闭包中不能直接调用 Test 对象中的方法 // 此时可以通过改变闭包代理进行调用 def closure = { fun() } closure.delegate = new

    3.1K20

    Python中通过对象不能调用类方法和静态方法的解析

    类方法和静态方法都是定义在类中的一种方法,可以通过类名直接调用,而不需要先创建该类的实例。...二、对象调用方法的原理在Python中,对象调用方法的原理可以简单概括为:Python通过找到方法所在的类,并将该对象作为第一个参数(通常用self)传入方法中。...三、不能通过对象调用类方法和静态方法的原因既然Python中对象调用方法的原理是将该对象作为第一个参数传入方法中,那么为什么不能通过对象调用类方法和静态方法呢?...因此,如果在静态方法中尝试访问类或实例的属性或方法,就会出现错误。四、总结Python中的类方法和静态方法是很有用的方法,可以通过类名直接调用而不需要创建实例。...为了解决该问题,我们可以使用类名来调用类方法和静态方法,从而避免了因对象无法传入正确参数而导致的错误。

    94930
    领券