📅  最后修改于: 2023-12-03 14:40:38.615000             🧑  作者: Mango
这篇文章主要介绍hackerrank中day 13的抽象类解决方案。抽象类就是一种不能被实例化的类,它存在的目的是为了被子类继承实现。在本题中,我们需要定义一个抽象类Book
,然后定义一个具体类MyBook
,并继承Book
。我们需要在MyBook
中实现Book
中定义的抽象方法。
在此题中,我们需要定义一个抽象类Book
,其中包含两个成员变量title
和author
。它还声明了一个名为display()
的抽象方法。
我们需要定义另一个具体类MyBook
,并继承Book
。其中MyBook
类包含一个整数变量price
,表示书的价格。我们需要在MyBook
中实现Book
中定义的display()
方法,该方法将打印输出书的所有信息,如下所示:
Title: <title>
Author: <author>
Price: <price>
首先,我们需要定义一个抽象类Book
,包括两个成员变量title
和author
,以及一个抽象的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的测试用例。