Java - 如何为子类的子类调用复制构造函数?
Java - how do I call copy constructor for subclass of subclass?
所以我 class 称为 'EducationalBook',它是 class 'Book' 的子 class。 class 'Book' 是 class 'PaperPublication' 的子 class。
在我的理解中,普通class(如'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;
}...
但是,我不确定如何为仅具有 class 本身参数的子 class 构建复制构造函数(例如:'Book' class带参数(Book b)ONLY)。我只想要一个参数的原因是因为有一条规则,对于子class的复制构造函数,我必须调用父class的复制构造函数(我相信这意味着使用"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 class,我没有任何想法来构建复制构造函数。由于 Java 不允许 super.super() 之类的东西,并且我不允许使用参数化构造函数,而只能使用父 class 的复制构造函数。
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;
}
所以我 class 称为 'EducationalBook',它是 class 'Book' 的子 class。 class 'Book' 是 class 'PaperPublication' 的子 class。
在我的理解中,普通class(如'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;
}...
但是,我不确定如何为仅具有 class 本身参数的子 class 构建复制构造函数(例如:'Book' class带参数(Book b)ONLY)。我只想要一个参数的原因是因为有一条规则,对于子class的复制构造函数,我必须调用父class的复制构造函数(我相信这意味着使用"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 class,我没有任何想法来构建复制构造函数。由于 Java 不允许 super.super() 之类的东西,并且我不允许使用参数化构造函数,而只能使用父 class 的复制构造函数。
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;
}