用Java实现子类

时间:2011-12-04 23:20:41

标签: java subclass

我正在完成Java编程课程的家庭作业,我无法理解子插件的概念。

以下是问题:

  

创建一个名为Book的类,其中包含标题和的数据字段   页数。包括这些字段的get和set方法。下一个,   创建一个名为Textbook的子类,其中包含一个附加字段   它拥有教科书的等级和其他方法   获取并设置成绩水平字段。写一个应用程序   演示使用每个类的对象。将文件保存为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();

    }
}

我将变量更改为private,这是我得到的编译器错误:

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 个答案:

答案 0 :(得分:4)

代码V1:

我相信它只是要求你创建一个带有main()函数的DemoBook.java,它创建每种类型的一个,并做一些set和gets。代码本身对我来说似乎很好!

代码V2:

你必须让你的吸气剂和安装者都公开! Tomas和其他人的意思是让你的变量本身是私有的,字符串和两个整数。您通常希望所有成员变量都是私有的,并且您的getter和setter是公共的。此外,如果您将getter和setter设为私有,则甚至无法在派生类中访问它们!

我还会在你的书之间做更多的事情。尝试从一个和一个设置到另一个,打印出所有三个,疯狂! =)

答案 1 :(得分:1)

正如Danalog所说,课程很好,现在使用它们!试着为你能想到的一切做一个例子。

我建议制作一些Book对象,Book b = new Book();并在其上调用一些方法,制作一些TextBooks,TextBook t = new TextBook();
最后Book bt = new TextBook();

全部玩弄它们并打印出一些结果。

编辑:@Tomas上面提出的很好的建议,在使用getter和setter时将变量设为私有。

答案 2 :(得分:0)

这项任务试图让你熟悉多态性的概念。 有一个很好的概述here

答案 3 :(得分:0)

  

包含这些字段的get和set方法。

这通常意味着您的字段(即成员变量)应为private封装它们并要求使用getset方法作为访问和修改这些变量的唯一方法。

  

如果我确实将这两个部分更正确,我将如何在DemoBook.java文件中实现它?

这是最简单的类,它只是一个测试类,看看你是否知道如何创建基类和派生类型的对象,并正确使用它们。这是应用程序的入口点,因此您将拥有public class DemoBookmain方法。

您应该制作一些测试用例以确保两个类的功能正常工作,并且可能使用{{1}打印出“fields”使用get方法为它们指定值后的方法。