我被要求根据以下代码解释继承+覆盖的概念。
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关键字+超级关键字)我是否用这个例子来解释继承?
答案 0 :(得分:1)
1)您提供的代码段是使用序列号和项目类型的参数创建项目对象;正如您在Item类中所看到的那样#39;构造函数,只需将序列号和项类型设置为提供的参数。 构造函数通常具有对象功能所需的参数,这就是它们存在的原因。确保完全构建对象
。public Item(String serialNumber, String itemType) {
this.setItemType(itemType);
this.setSerialNumber(serialNumber);
2)构造函数链接是当一个对象引用其另一个构造函数时,允许使用已经提供给对象进行构造的不同参数来重用构造功能。 在您给出的示例中,IPad对象只是继承Item构造函数。作为子类,IPad需要在其自己的构造中引用Item的构造函数。这必须在第一行完成。 通过这种方式,您确实无法覆盖构造函数,但是,通过将ram设置为在IPad构造函数参数中提供的内容,您可以为Item类中不存在的IPad类的构造添加其他功能。 / p>
public Ipad(String serialNumber, int ram) {
super(serialNumber,"iPad");
this.setRam(ram);
3)除了#printItem之外,你在这个例子中没有任何内容,它将项目的ram添加到项目的打印字符串表示中。除此之外,您只需通过Ipad类继承并添加到Item类。
4)你可以用简单的英语来解释这个。 IPad是一个项目,具有作为项目的所有功能和数据,并添加了自己的IPad特定功能和数据。
您还可以将此与其他情况进行比较。例如用矩形和正方形。正方形是一个矩形,但是,矩形不一定是正方形,尽管它可以是。 IPad是一个项目,但是,项目不一定是IPad,尽管它可能是。 它是一个规范,是其更一般的父母的一个分支。
答案 1 :(得分:0)
您可以使用此示例解释它:
Item item = new Ipad("serial", 123);
System.out.println(item.printItem());
您可以说方法printItem()
是使用Ipad
类实现执行的,因为Ipad
会从Item
继承它并覆盖它。
因此,printItem()
将打印"serial, iPad, 123"