2016-09-14 2 views
0

Я работаю над проблемой наследования. У меня супер класс Книги. Тогда у меня есть класс Телефон, который расширяет книгу. Затем у меня есть привод PolyMain, который использует массив для генерации вывода. Мне было поручено следующее:Необходима помощь с кодом наследования и конструктора

* Конструктор класса Phone должен суммировать whitePages + yellowPages, чтобы получить общее количество страниц в книге и передать это суперклассу книги в качестве единственного параметра в супервызове. Помните, что общее количество страниц в книге и название книги заданы в конструкторе класса Book.

Измените класс PolyMain, чтобы создать хотя бы одну из ваших телефонных книг и сохранить ее в библиотеке. Теперь вы должны иметь возможность распечатывать библиотеку, не изменяя метод печати, определенный в классе PolyMain. *

Вывод должен иметь заголовок, количество страниц (всего), # желтых страниц и # белых страниц , Программа ниже дает мне эту информацию.

Однако в PolyMain добавлены целые числа Пример: библиотека [2] = новый роман («Farm Farm», 250, 9); Добавлены «250 и 9», и это то, что печатает для страниц и разделов.

Как я должен быть уверен, что мой конструктор суммирует желтые страницы и белые страницы, если мне нужно добавить числа в класс PolyMain? библиотека [3] = новый телефон («Справочник Черных Холмов», 600, 350, 250); Если я не добавляю «600, 350, 250» или некоторые целые числа, я получаю сообщение об ошибке и не компилируется.

Вот код для суперкласса:

public class Book 
{ 
    private String title;  
    private int pages;  

    public Book(String title, int pages)  
    {  
    this.title = new String(title);  
    setPages(pages); 
    }  

public void setPages(int pages)  
{  
    this.pages = pages; 
}  
public int getPages()  
{  
    return pages;  
}  
public void print()  
{  
    System.out.print(title + " has " + pages + " pages"); 
    } 
} 

Вот мой ребенок класс.

public class Phone extends Book 
{ 
    private int yellowPages = 250; 
    private int whitePages = 350; 


public Phone (String title, int pages, int whitePages, int yellowPages)  
{ 
    super(title, pages); 

    this.whitePages = whitePages; 
    this.yellowPages = yellowPages; 
    pages = whitePages + yellowPages; 
    }  
public void print()  
{  
    super.print();  
    System.out.println(", " + yellowPages + " yellowPages, " + "and " + 
        whitePages + " whitePages."); 
} 

}

Вот мой класс драйвера.

public class PolyMain 
{ 
public static void main(String [] args)  
{  
    Book [] library = new Book [5];  
    library[0] = new Novel("Jaws", 300, 15);  
    library[1] = new Almanac("New World ", 100, 50);  
    library[2] = new Novel("Animal Farm ", 250, 9); 
    library[3] = new Phone("Black Hills Directory ", 600, 350, 250); 
    listBooks(library);  
}  
    static void listBooks(Book [] library)  
{  
    for (int i = 0; i < library.length && library[i] != null; i++)  
    library[i].print();  
}  
} 
+0

Вы, кажется, чтобы быть на правильном пути, но вам не нужен параметр '600' /' pages', потому что в конструкторе вы можете вызвать 'super (title, whitePages + yellowPages)'. –

+0

@Ken Y-N. Спасибо за указатель, но я не совсем понял. Если я вытащу «600/350/250 /» из объекта, я получаю сообщение о том, что мой метод «Телефон» настроен на «string, int, int, int». Кажется, я попал в ловушку 22. Если я изменю телефон, это испортит PolyMain, и я не могу изменить PolyMain без изменения телефона. Независимо от того, как я его редактирую, я получаю ошибки. Вы можете объяснить? Пожалуйста и спасибо! – HerdingDogRescuer

ответ

1

Ваши данные говорят все это «конструктор класса Телефон должен подытожить WhitePages + Желтых, чтобы получить общее количество страниц в книге и передать это суперкласса книги как один параметр в супер вызов."

Вы можете настроить свой телефон конструктор только с 3 параметрами - название, белые страницы и желтые страницы

Теперь называют супер-класса конструктор, используя название как название и WhitePages + Желтых как страницы

+0

+ mikbzon Спасибо. Я все еще не знаю, что такое класс драйвера, который создает новый объект телефона. – HerdingDogRescuer

+0

Спасибо. Я все еще не знаю, что такое класс драйвера, который создает новый объект телефона.библиотека [3] = новый телефон («Каталог горячих источников», 600, 350, 250); Когда я вытаскиваю цифры (600, 350, 250), я получаю сообщение об ошибке. Я не уверен, как изменить конструктор в телефоне и объект в PolyMain, чтобы заставить их работать. – HerdingDogRescuer