📌  相关文章
📜  day 13 抽象类hackerrank解决方案javascript(1)

📅  最后修改于: 2023-12-03 14:40:38.615000             🧑  作者: Mango

Hackerrank解决方案: Javascript

这篇文章主要介绍hackerrank中day 13的抽象类解决方案。抽象类就是一种不能被实例化的类,它存在的目的是为了被子类继承实现。在本题中,我们需要定义一个抽象类Book,然后定义一个具体类MyBook,并继承Book。我们需要在MyBook中实现Book中定义的抽象方法。

问题描述

在此题中,我们需要定义一个抽象类Book,其中包含两个成员变量titleauthor。它还声明了一个名为display()的抽象方法。

我们需要定义另一个具体类MyBook,并继承Book。其中MyBook类包含一个整数变量price,表示书的价格。我们需要在MyBook中实现Book中定义的display()方法,该方法将打印输出书的所有信息,如下所示:

Title: <title>
Author: <author>
Price: <price>
解决方案

首先,我们需要定义一个抽象类Book,包括两个成员变量titleauthor,以及一个抽象的display()方法。代码如下:

// 定义抽象类Book
class Book {
    constructor(title, author) {
        if (this.constructor === Book) {
            throw new TypeError('Abstract class "Book" cannot be instantiated directly.');
        }
        this.title = title;
        this.author = author;
    }
    // 抽象方法display()
    display() {
        throw new Error('Method "display()" must be implemented.');
    }
}

在这个抽象类中,我们判断如果实例化了Book类,则抛出一个类型错误。这是因为抽象类不能被实例化,所以要进行限制。然后定义了一个抽象的display()方法。这个方法需要在MyBook中被实现。

接下来,我们定义一个具体的类MyBook,它继承了Book类。并且在其中实现了display()方法。代码如下:

// 定义具体类MyBook
class MyBook extends Book {
    constructor(title, author, price) {
        super(title, author);
        this.price = price;
    }
    // 实现继承自Book类的抽象方法display()
    display() {
        console.log(`Title: ${this.title}`);
        console.log(`Author: ${this.author}`);
        console.log(`Price: ${this.price}`);
    }
}

在这个具体类中,我们重写了Book类中的display()方法,将书的所有信息输出到控制台。

最后,我们需要编写测试代码来测试这个解决方案是否正确。测试代码如下:

// 测试用例
let book = new MyBook('The Alchemist', 'Paulo Coelho', 248);
book.display();

输出结果如下:

Title: The Alchemist
Author: Paulo Coelho
Price: 248

可以看到,我们成功地实现了这个hackerrank题目的解决方案。

总结

本篇文章主要介绍了hackerrank中day 13的抽象类解决方案,其中使用了Javascript语言的面向对象编程功能。我们定义了一个抽象类Book,然后定义了一个具体类MyBook,并继承了Book类。最后实现了Book中的抽象方法display()。这个解决方案成功地通过了hackerrank的测试用例。