我将我的父类变成了一个数组,但它不允许我通过同一个数组使用我的子类中的方法。它希望能够只生成一个数组,但能够使用这两个类中的所有方法。
public static void main (String args[])
Book[] bk = new Book[5];
class Book{
private String title;
public String getTitle(){
return title;}
//rest of code for class
}
class EBook extends Book {
private String website;
public EBook (String title, String website)//more the just these two but you get the idea
{
super(title);
setWebsite(website);}
public String getWebsite (){
return website;}
//rest of code for class
}
现在每当我在main方法中键入类似bk.getWebsite的东西时,Eclipse就会给我一个错误。它说我必须先在Book类中创建方法。除了创建另一个数组之外,我还能做些什么来解决这个问题,或者这是唯一的选择吗?
答案 0 :(得分:1)
为了调用特定于子类的方法,您需要添加一个强制转换:
if (bk[i] instanceof EBook) {
String website=((EBook)bk[i]).getWebsite();
}
请注意,检查此类型不是最理想的。我们应该更喜欢在基类中放置方法,从子类调用覆盖,或者使用双重调度(例如通过访问者模式)。
答案 1 :(得分:0)
Book没有带元素String的构造函数。
答案 2 :(得分:0)
您正在尝试调用要调用EBook.getWebsite()的Book.getWebsite()。为此,您必须先将其投射到EBook。
答案 3 :(得分:0)
您收到错误可能是因为未在父Book类中定义了getWebsite()方法。
如果您希望父级能够调用子方法,那么可以考虑将Book类作为抽象类,并定义getWebsite()抽象方法并在Ebook中实现getWebsite方法。
现在当你有一个带有电子书实施的Book实例时,你将能够通过Book实例调用在Ebook类中实现的getWebsite方法。
找到有关抽象方法和类的更多信息