我应该在子类中使用super()调用父类方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该在子类中使用super()调用父类方法相关的知识,希望对你有一定的参考价值。

我在javascript中有关于super()的问题。我应该在子类中使用super()调用父类方法'stringy()'还是这样使用它:

function solve() {
class Melon {
    constructor(weight, melonSort) {
        if (new.target === Melon) {
            throw new Error('Abstract class cannot be instantiated directly.')
        }
        this.weight = weight;
        this.melonSort = melonSort;
        this._elementIndex = weight * Number(melonSort.length);

    }
    stringy() {
        return `Element: ${this.element}
Sort: ${this.melonSort}
Element Index: ${this._elementIndex}`
    }
}

class Watermelon extends Melon {
    constructor(weight, melonSort) {
        super(weight, melonSort);
        this.element = 'Water';
    }
}

function solve() {
class Melon {
    constructor(weight, melonSort) {
        if (new.target === Melon) {
            throw new Error('Abstract class cannot be instantiated directly.')
        }
        this.weight = weight;
        this.melonSort = melonSort;
        this._elementIndex = weight * Number(melonSort.length);

    }
    stringy() {
        return `Element: ${this.element}
Sort: ${this.melonSort}
Element Index: ${this._elementIndex}`
    }
}

class Watermelon extends Melon {
    constructor(weight, melonSort) {
        super(weight, melonSort);
        this.element = 'Water';
    }

    stringy(){
        return super.stringy();
    }
}

哪个是正确的,和有什么区别。

答案

除非您要更改行为,否则无需在stringy中包含Watermelon。如果您不这样做,Watermelon实例将继承Melon版本。

以上是关于我应该在子类中使用super()调用父类方法的主要内容,如果未能解决你的问题,请参考以下文章

子类要调用父类的方法,必须使用super关键字.对吗?

super与this的用法

java中父类的方法已经被覆盖那子类还能用super关键字调用父类的方法吗

Python中子类怎样调用父类方法

Java学习笔记3.5.3 继承 - super关键字

super和this关键字