我有一个类似的课程:
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()
函数?
答案 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();