无法从我的父类数组中获取子类的方法

时间:2014-05-24 21:00:47

标签: 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 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类中创建方法。除了创建另一个数组之外,我还能做些什么来解决这个问题,或者这是唯一的选择吗?

4 个答案:

答案 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方法。

您可以在Oracle docs Abstract

找到有关抽象方法和类的更多信息