【问题标题】:Java Call Method of Class Object In Array数组中类对象的Java调用方法
【发布时间】:2015-02-27 19:52:24
【问题描述】:

我有这样的课:

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() 函数?

【问题讨论】:

    标签: java inheritance methods


    【解决方案1】:

    如果您的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 块。

    【讨论】:

    • 完美。我确实有除教科书以外的其他物品,因此可以按需要进行。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 2011-04-17
      • 1970-01-01
      • 2012-05-20
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多