家庭作业:解释Java中的继承+重写



我被要求根据以下代码解释继承+重写的概念。

public class Item {
private String itemType;
private String serialNumber;
public Item(String serialNumber, String itemType) {
this.setItemType(itemType);
this.setSerialNumber(serialNumber);     
}
public String getItemType() {
return itemType;
}
public void setItemType(String itemType) {
this.itemType = itemType;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String printItem() {
return serialNumber + "," + itemType;
}
}

public class Ipad extends Item {
private int ram;
public Ipad(String serialNumber, int ram) {
super(serialNumber,"iPad");
this.setRam(ram);
}
public int getRam() {
return ram;
}
public void setRam(int ram) {
this.ram = ram;
}
public String printItem() {
return super.getSerialNumber() + "," + super.getItemType()+ "," + getRam() + " GB";
}   
}

我很难真正解释发生了什么,因为我是Java的新手:)我会自己评论每一行,直到我有更多的练习,但到目前为止,循序渐进的评论似乎是我掌握事物的最佳方式。

1) 下面的代码片段中发生了什么:我假设它是一个构造函数,但下面的两行做什么?

public Item(String serialNumber, String itemType) {
this.setItemType(itemType);
this.setSerialNumber(serialNumber); 

2) 下面会发生什么?有两个构造函数吗?据我所知,构造函数不能被重写。我假设super正在从超类调用构造函数,但随后添加了一个新的ram变量。那么,如果没有被重写,这就是所谓的构造函数链接吗?

public Ipad(String serialNumber, int ram) {
super(serialNumber,"iPad");
this.setRam(ram);
}

3) 什么被覆盖?

4) 除了使用extends关键字+super关键字之外,我如何用这个例子解释继承?

1)您提供的代码片段正在创建一个具有序列号和项目类型参数的项目对象;您可以在Item类的构造函数中看到,它只需将序列号和项类型设置为所提供的参数。构造函数通常具有使对象具有功能所需的参数,这就是它们存在的原因。确保对象完全"构造"。

public Item(String serialNumber, String itemType) {
this.setItemType(itemType);
this.setSerialNumber(serialNumber); 

2) 构造函数链接是指一个对象引用其另一个构造函数,从而允许在为对象提供不同参数进行构造的情况下重用构造功能。在您给出的示例中,IPad对象只是继承了Item构造函数。作为一个子类,IPad需要在自己的构造中引用Item的构造函数。这必须在第一行完成。这样,确实不能重写构造函数,但是,通过将ram设置为IPad构造函数参数中提供的ram,可以为Item类中不存在的IPad类的构造添加额外的功能。

public Ipad(String serialNumber, int ram) {
super(serialNumber,"iPad");
this.setRam(ram);

3) 在本例中,除了#printItem之外,您没有覆盖任何内容,它将项目的ram添加到项目的打印字符串表示中。除此之外,您只是通过Ipad类继承并添加到Item类中。

4) 你可以用通俗易懂的英语来解释。IPad是一个项目,具有作为一个项目的所有功能和数据,并添加了它自己的IPad特定功能和数据。

你也可以将这种情况与另一种情况进行比较。例如矩形和正方形。正方形是矩形,然而,矩形不一定是正方形,尽管它可以是。IPad是一个项目,然而,项目不一定是IPad,尽管它可能是。它是一个规范,是其更通用的父规范的一个分支。

您可以使用以下示例进行解释:

Item item = new Ipad("serial", 123);
System.out.println(item.printItem());

可以说方法printItem()是用Ipad类实现执行的,因为IpadItem继承并重写它

因此,printItem()将打印"serial, iPad, 123"

最新更新