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

jei*_*yun 2 java inheritance copy-constructor

所以我有一个名为“EducationalBook”的类,它是“Book”类的子类。“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;
    }...
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何为仅具有该类本身参数的子类构建复制构造函数(例如:仅具有参数(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;
    }...
Run Code Online (Sandbox Code Playgroud)

我什至不确定这是正确的方法,但它至少编译时没有发生任何编译阶段错误。

但是,对于 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();}
}
Run Code Online (Sandbox Code Playgroud)

(还有一个问题,默认构造函数对吗?)

我感觉我对Java继承的理解总体上还比较薄弱。对我有什么启发吗?

Rob*_*ock 5

这比你想象的要容易。

的复制构造函数Book

public Book(Book b)
{
  super(b);
  ISBN = b.ISBN;
  issued = b.issued;
  author = b.author;
}
Run Code Online (Sandbox Code Playgroud)

以及以下的复制构造函数EducationalBook

public EducationalBook(EducationalBook b)
{
  super(b);
  edition = b.edition;
  speciality = b.speciality;
}
Run Code Online (Sandbox Code Playgroud)