Java can';无法从父类数组的子类中获取方法
我将父类设置为一个数组,但它不允许我通过同一个数组使用子类中的方法。它希望能够只生成一个数组,但能够使用两个类中的所有方法Java can';无法从父类数组的子类中获取方法,java,arrays,inheritance,Java,Arrays,Inheritance,我将父类设置为一个数组,但它不允许我通过同一个数组使用子类中的方法。它希望能够只生成一个数组,但能够使用两个类中的所有方法 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
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类中创建方法。除了创建另一个数组之外,我还能做些什么来解决这个问题吗?或者这是唯一的选择吗?这本书没有带元素字符串的构造函数。为了调用特定于子类的方法,您需要添加强制转换:
if (bk[i] instanceof EBook) {
String website=((EBook)bk[i]).getWebsite();
}
请注意,像这样检查类型是次优的。人们应该更喜欢将方法放在基类中,并从子类调用重写,或者使用双重分派(例如,通过访问者模式)。您尝试调用Book.getWebsite(),在其中调用EBook.getWebsite()。为此,您必须先将其转换为电子书。您收到一个错误,可能是因为父图书类中未定义getWebsite()方法
如果您希望父方能够调用子方法,那么如果可能的话,可以考虑将BooC类作为抽象类并定义GETWebSITE()抽象方法,并在eBooad中实现GETWeb站点方法。p> 现在,当您有一个带有电子书实现的Book实例时,您将能够通过Book实例调用在Ebook类中实现的getWebsite方法
您可以在此处找到有关抽象方法和类的更多信息它给您带来了什么错误?我至少能看到四种(所有语法)。你是否在问,当你创建了一个类型为
的数组时,为什么不能使用电子书中的方法?