数组中类对象的Java调用方法

时间:2015-02-27 19:52:25

标签: java inheritance methods

我有一个类似的课程:

public abstract class Book {

    public abstract double retailPrice();

    private String title, author, ISBN;
    private double price;

    public Book() {
        title = "";
        author = "";
        ISBN = "";
        price = 0.00;
    }
    public Book(String title, String author, String ISBN, double price) {
        this.title = title;
        this.author = author;
        this.ISBN = ISBN;
        this.price = price;
    }
    public String getTitle() {
        return title;
}

在数组中使用类Textbook(如下所示)的对象:

public class Textbook extends Book {

    private String course;

    @Override
    public double retailPrice() {
        return super.getPrice() + (super.getPrice() * .10);
    }
    public Textbook() {
        course = "";
    }
    public Textbook(String course) {
        this.course = course;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
}

我的数组中充满了以下对象:

Book[] books = new Book[100];
books[i] = new Textbook(courseName);

当我使用books[i].调用我的数组时,唯一可用的方法是Textbook的继承类(Book)的getTitle()

所以我的问题是,如何访问Textbook类的getCourse()函数?

2 个答案:

答案 0 :(得分:3)

如果books数组的所有元素都是Textbook个实例,则可以将数组声明为Textbook books[]类型而不是Book[]。否则,你需要施放,为了安全起见,你需要测试书籍类型:

String course = null;
if (books[i] instanceof Textbook) {
    course = ((Textbook) books[i]).getCourse();
}

变体是跳过instanceof测试,而是将代码包装在try/catch语句中以捕获可能引发的任何ClassCastException。当然,如果您通过其他逻辑知道books[i]必须是Textbook的实例,则可以安全地避开类型检查和try/catch块。

答案 1 :(得分:0)

我假设必须使用Book类型创建数组。 因此,您必须将对象强制转换为TextBook才能获得课程:

String textBookCourse = ((Textbook) books[i]).getCourse();