Итак, у меня есть класс «Образовательная книга», который является подклассом класса «Книга».А класс '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 в целом слабое.Любое просветление для меня?