Реализация подклассов в Java - PullRequest
       5

Реализация подклассов в Java

0 голосов
/ 05 декабря 2011

Я выполняю домашнее задание для курса по программированию на Java, и у меня возникают проблемы с пониманием концепции подкласса.

Вот вопрос:

Создайте класс с именемКнига, которая содержит поля данных для заголовка и количества страниц.Включите методы get и set для этих полей.Затем создайте подкласс с именем «Учебник», который содержит дополнительное поле, содержащее уровень оценки для учебника, и дополнительные методы для получения и установки поля уровня оценки.Напишите приложение, которое демонстрирует использование объектов каждого класса.Сохраните файлы как Book.java, Textbook.java и DemoBook.java.

Вот мой код для Book.java:

public class Book
{
    String bookTitle;
    int numPages;

    private void setBTitle(String title)
    {
        bookTitle = title;
    }

    private void setBPages(int pages)
    {
        numPages = pages;
    }

    private String getBTitle()
    {
        return bookTitle;
    }

    private int getBPages()
    {
        return numPages;
    }

    public void displayBookInfo()
    {
        System.out.println("The book's title is: " + bookTitle + ".");
        System.out.println("The number of pages is: " + numPages + ".");
    }
}

Вот мой код для Texbook.java:

public class Textbook extends Book
{
    int gradeLevel;

    public int getGLevel()
    {
        return gradeLevel;
    }

    public void setGLevel(int level)
    {
        gradeLevel = level;
    }
    }

Если я действительно правильно выполнил эти две части, как бы я реализовал это в файле DemoBook.java?

Буду признателен за любую помощь или руководство.

Вот мой код для файла DemoBook.java:

import java.util.Scanner;

public class DemoBook
{
    public static void main(String[] args)
    {
        String BTitle;
        int BPages;
        int BLevel;

        Book b = new Book();
        Textbook t = new Textbook();
        Book bt = new Textbook();

        Scanner input = new Scanner(System.in);
        System.out.println("Please enter the title of your book: ");
        BTitle = input.nextLine();
        System.out.println("Please enter the number of pages: ");
        BPages = input.nextInt();
        System.out.println("Please enter the grade level: ");
        BLevel = input.nextInt();

        b.setBTitle(BTitle);
        b.setBPages(BPages);
        t.setGLevel(BLevel);

        b.displayBookInfo();

    }
}

Я изменил переменные на приватные, и это ошибка компилятора, которую я получаю:

DemoBook.java:33: error: setBTitle(String) has private access in Book
        b.setBTitle(BTitle);
         ^
DemoBook.java:34: error: setBPages(int) has private access in Book
        b.setBPages(BPages);
         ^
2 errors

Я до сих пор не понимаю этого.Глава называется «Введение в наследование».

Ответы [ 4 ]

4 голосов
/ 05 декабря 2011

Код V1:

Я полагаю, что он просто просит вас создать DemoBook.java с функцией main (), которая создает один из каждого типа, выполняет несколько наборов и операций получения.Сам код кажется мне подходящим!

Код V2:

Все ваши геттеры и сеттеры должны оставаться открытыми!Томас и другие люди имели в виду, что ваши переменные должны быть частными, String и два целых числа.Обычно вы хотите, чтобы все ваши переменные-члены были приватными, а ваши получатели и установщики - публичными.Кроме того, если вы сделаете ваши геттеры и сеттеры частными, вы даже не сможете получить к ним доступ в производных классах!

Я бы также сделал немного больше для получения и настройки между вашими книгами.Попробуй добраться от одного до другого, распечатай все три иди!=)

1 голос
/ 05 декабря 2011

Как сказал Даналог, классы в порядке, теперь используйте их!Попробуйте сделать пример для всего, что вы можете придумать.

Я бы предложил создать несколько объектов Book Book b = new Book(); и вызвать для них некоторые методы, создать несколько текстовых книг TextBook t = new TextBook();.
И, наконец, Book bt = new TextBook();.

Поиграйте со всеми и распечатайте некоторые результаты.

РЕДАКТИРОВАТЬ: Отличное предложение от @Tomas выше, сделайте переменные приватными, так как вы используете методы получения и установки.

0 голосов
/ 05 декабря 2011

Включите методы get и set для этих полей.

Как правило, это означает, что ваши поля (т. Е. Переменные-члены) должны быть private, инкапсулируя их и требовать использования методов get и set в качестве единственного способа доступа и изменить эти переменные.

Если я действительно правильно выполнил эти две части, как бы я реализовал это в файле DemoBook.java?

Это самый простой класс из всех, это просто тестовый класс, чтобы узнать, знаете ли вы, как создавать объекты базового и производного типа, и правильно их использовать. Это точка входа в приложение, поэтому у вас внутри будет public class DemoBook и ваш main метод.

Вам нужно сделать тестовых случаев , чтобы убедиться, что функциональность двух классов работает должным образом, и, возможно, распечатать "поля" с помощью методов get после того, как вы присвоили им значения с помощью методов set.

0 голосов
/ 05 декабря 2011

Это задание пытается познакомить вас с концепцией полиморфизма.Там хороший обзор здесь

...