Java - как я могу вызвать конструктор копирования для подкласса подкласса? - PullRequest
0 голосов
/ 11 октября 2018

Итак, у меня есть класс «Образовательная книга», который является подклассом класса «Книга».А класс 'Book' является подклассом класса 'PaperPublication'.

В моем понимании конструктор копирования для обычного класса (например, «PaperPublication») можно записать следующим образом:

public class PaperPublication
{
    String title;
    double price;
    int nOP; //number of pages
    public PaperPublication(PaperPublication p)
    {
        title = p.title;
        price = p.price;
        nOP = p.nOP;
    }...

Однако я не уверен, как построить конструктор копирования для подкласса только с параметром этого класса (например, класс «Книга» с параметром (ТОЛЬКО книга b)).Причина, по которой мне нужен только один параметр, заключается в том, что существует правило, согласно которому для конструктора копирования подкласса я должен вызывать конструктор копирования родительского класса (я считаю, что это означает использование «super ()», верно?).После некоторого исследования, хотя я не нашел четкого ответа, я построил так:

public class Book extends PaperPublication
{
    long ISBN;
    int issued;
    String author;
    public Book(Book b)
    {
        super(b.getTitle(), b.getPrice(), b.getNOP());
        ISBN = b.ISBN;
        issued = b.issued;
        author = b.author;
    }...

Я даже не уверен, что это правильный способ сделать это, но он по крайней мере скомпилирован без какой-либо компиляции.Ошибка этапа.

Однако для класса EducationalBook у меня нет единой идеи создать конструктор копирования.Поскольку Java не допускает что-то вроде super.super (), и мне не разрешено использовать параметризованный конструктор, а только конструктор копирования родительского класса.

public class EducationalBook extends Book
{
    int edition;
    String speciality;
    public EducationalBook(EducationalBook e)
    {
        //??? no clue..
    }
    public EducationalBook() // default constructor. is this right?
    {super();}
}

(И для дополнительного вопроса, это конструктор по умолчанию, верно?)

Мне кажется, что мое понимание наследования Java в целом слабое.Любое просветление для меня?

1 Ответ

0 голосов
/ 11 октября 2018

Это проще, чем вы думаете.

Конструктор копирования Book:

public Book(Book b)
{
  super(b);
  ISBN = b.ISBN;
  issued = b.issued;
  author = b.author;
}

И конструктор копирования EducationalBook:

public EducationalBook(EducationalBook b)
{
  super(b);
  edition = b.edition;
  speciality = b.speciality;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...