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

家庭作业:解释继承+;Java中的重写,java,inheritance,subclass,Java,Inheritance,Subclass,我被要求根据以下代码解释继承+重写的概念 public class Item { private String itemType; private String serialNumber; public Item(String serialNumber, String itemType) { this.setItemType(itemType); this.setSerialNumber(serialNumber); } public String getItem

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

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关键字之外,我如何用这个例子来解释继承?

您可以用这个例子来解释它:

Item item = new Ipad("serial", 123);
System.out.println(item.printItem());
可以说方法
printItem()
是通过
Ipad
类实现执行的,因为
Ipad
继承了
Item
并重写了它

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

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

public Item(String serialNumber, String itemType) {
this.setItemType(itemType);
this.setSerialNumber(serialNumber); 
2) 构造函数链接是当一个对象引用它的另一个构造函数时,允许在为对象提供不同参数进行构造的情况下重用构造功能。 在您给出的示例中,IPad对象只是继承了Item构造函数。作为一个子类,IPad需要在其自身构造中引用项的构造函数。这必须在第一行完成。 这样,确实不能重写构造函数,但是,通过将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,尽管它可能是。
这是一个规范,是它更一般的父项的一个分支。

请尝试限制每个…问题只能问一个问题。对不起,我意识到它看起来很难回答……)我建议您使用在这里找到的许多答案来尝试您的源代码,或者通过谷歌搜索和自己打字。键入时尝试继承的概念和限制:例如,尝试使用派生类中基类的私有方法。它不会编译。因此,尝试所有这些,你会得到一个很好的图片。如果需要,甚至可以更改基类。非常感谢,Justisr!这让我明白了很多:)所以这里实际上没有重写?我编辑了我的答案来纠正我在#3上犯的错误,你正在重写printItem方法。很抱歉,我之前没有看到这个。虽然我很高兴我其余的回答对你有用^-^