请确保您在子类的构造函数中调用超类的构造函数。
该解决方案为我工作得很好:
public class Ship {
private String name;
private int weight;
public Ship(String name, int weight) {
this.name = name;
this.weight = weight;
}
}
class OilShip extends Ship {
private int oilCapacity;
public OilShip(int oilCapacity, String name, int weight) {
super(name, weight);
this.oilCapacity = oilCapacity;
}
}
class FishingShip extends Ship {
private int fisherMen;
public FishingShip(int fisherMen, String name, int weight) {
super(name, weight);
this.fisherMen = fisherMen;
}
}
class CarriageShip extends Ship {
private int containers;
public CarriageShip(int containers, String name, int weight) {
super(name, weight);
this.containers = containers;
}
}
,Java的类应该一直被赋予一个名称,其中第一个字符是大写字母,每一个新词同前如前所述 - > CamelCase
您不需要不同的构造函数。在这里使用继承背后的真棒事情是,不管你从你的构造函数中放入“abcd”的超类“Ship”中的哪个子类,它都会被接受:
public class Abcd {
private Ship ship;
public Abcd(Ship ship){
this.ship = ship;
}
}
这样可以正常工作。你有什么问题? – SLaks 2014-09-28 14:12:29
你能解释一下你的问题吗?如果你使用IDE,你是否在屏幕上看到任何错误或警告?如果你正在使用命令行来编译java类,你会得到任何编译错误吗? – CalabashFox 2014-09-28 14:13:55
您添加的代码将使'class abcd'中的成员'ship'通过船级接口指向oil_ship的实例。 你说你有一艘船'Ship ship = new Ship(...)'的实例;'这个实例永远不会是一艘Oil_ship – odedsh 2014-09-28 14:14:08