java - Java - 如何为子类的子类调用复制构造函数?
问题描述
所以我有一个名为“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;
}...
但是,我不确定如何为仅具有该类本身参数的子类构建复制构造函数(例如:仅具有参数(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继承的理解总体上很薄弱。对我有什么启示吗?
解决方案
这比你想象的要容易。
的复制构造函数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;
}
推荐阅读
- sql - Ruby on Rails 难查询
- angular - 如何使用角度在浏览器的新选项卡中实现打开链接?
- hadoop - 有没有办法 hadoop getmerge 部分文件不是所有文件?
- python - 使用 Python ctypes 作为示例从 Ruby 中 FFI 中包装的 C 库获取返回值的问题
- php - 致命错误:未捕获的错误:调用 C 中 bool 上的成员函数 execute() 堆栈跟踪:#0 require() #1 {main} 在第 31 行的 C 中抛出
- angular - Highcharts没有以角度旋转到垂直
- c# - 减去 2 个列表
- html - 选择选项框的高度
- python - 使用 pandas 数据框为多列绘制图形
- database - 如何解决 mongo db 损坏转储错误。每当我删除一些数据时,就会出现这个错误。我在这里附上日志文件