所以我有一个叫做'EducationalBook'的类,它是'Book'类的子类。而“书”类是“纸出版”类的子类。
据我所知,普通类(如“ 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;
}...
但是,我不确定如何为仅具有该类本身参数的子类构建复制构造函数(例如:仅具有参数(Book b)的'Book'类)。我只想要一个参数的原因是因为有一个规则,对于子类的副本构造函数,我必须调用父类的副本构造函数(我相信这意味着使用“ 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继承的整体了解很薄。对我有什么启发?
答案 0 :(得分:4)
比您想象的要容易。
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;
}