Java - 如何为子类的子类调用复制构造函数?



所以我有一个名为"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"类(Book 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继承的理解总体上很弱。对我有什么启发吗?

这比你想象的要容易。

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;
}

最新更新