我是Java的新手,已经开始了几个星期的课程,并被要求完成一个包含以下信息的程序:
设计具有以下数据字段的船舶类:
船舶名称的数据字段(字符串)。
船舶建造年份的数据字段(int)。
构造函数和适当的访问器和更改器。
显示船名及其年份的toString方法。
设计一个扩展Ship类的CruiseShip子类。 CruiseShip类应具有以下内容:
最大乘客数量的额外数据字段(int)。
构造函数和适当的访问器和更改器。
一个toString方法,它覆盖基类中的toString方法。 CruiseShip类的toString方法也应该包括 最大乘客限制。
设计扩展Ship类的CargoShip类。 CargoShip类应具有以下内容:
吨位货物容量的额外数据字段(int)。
构造函数和适当的访问器和更改器。
一个toString方法,它覆盖基类中的toString方法。 CargoShip类的toString方法也应该包括 货物吨位。
在适当的班级中包括一个等于测试两艘船是否相等的方法 - 如果它们具有 同名,并于同年建成。
- 醇>
演示程序(ShipTester)中具有Ship对象数组(至少5个)的类。分配各种船舶,CruiseShip, 和CargoShip对象到数组元素(你可以硬编码 对象和数据)并打印出初始船舶配置。节目 您可以在采样中使用访问器和增变器方法 船舶(再次,你可以在这里硬编码方法参数,如果 你喜欢)。
我理解问题所依据的基础,并且我做了以下事情:
Ship.java
public class Ship {
private String name;
private int yearBuilt;
public Ship(String name, int yearBuilt) {
this.name = name;
this.yearBuilt = yearBuilt;
}
public String returnName() {
return this.name;
}
public int returnYear() {
return this.yearBuilt;
}
public boolean equals(Ship other) {
return false;
}
public String toString() {
return "[Name: " + this.name + ". Year built: " + this.yearBuilt + "]";
}
}
CruiseShip.java
public class CruiseShip extends Ship {
private int maxPassengers;
public CruiseShip() {
super("USS Enterprise", 2245);
this.maxPassengers = 2400;
}
public CruiseShip(String name, int yearBuilt, int maxPassengers) {
super(name, yearBuilt);
this.maxPassengers = maxPassengers;
}
public String toString() {
return "Cruise Ship" + super.toString() + ", Passengers: " + this.maxPassengers + "]";
}
}
CargoShip.java
public class CargoShip extends Ship {
private int cargoCapacity;
public CargoShip() {
super("Black Pearl", 1699);
this.cargoCapacity = 50000;
}
public CargoShip(String name, int yearBuilt, int cargoCapacity) {
super(name, yearBuilt);
this.cargoCapacity = cargoCapacity;
}
public String toString() {
return "Cargo Ship" + super.toString() + ", Tonnage: " + this.cargoCapacity + "]";
}
}
并在我的测试人员文件中 - ShipTester.java
public class ShipTester {
public static void main(String []args) {
//I don't know what to put over here...
}
}
我不知道主要方法应该放什么...我知道我必须创建一系列船只,但我不知道如何用货船,游轮等来做到这一点。 ..
我应该拥有的输出:
显示船舶: 船[名称:Queen Annes Revenge建造年份:1701]
游轮[船舶[名称:USS企业建成年份:2245],乘客:2400]
货船[船舶[名称:黑珍珠建成年份:1699],吨位:50000]
游轮[船舶名称:USS Voyager建造年份:2371],乘客:2800]
货船[船舶[名称:建造的胜利年份:1790],吨位:33100]
答案 0 :(得分:2)
扩展到Hovercraft所说的内容,但您可能希望将ArrayList用于对象数组。
Creating an Arraylist of Objects
实施例
ArrayList<Ship> myArray = new ArrayList();
myArray.add(new CargoShip("TheKing",1990,10000));
myArray.add(new CruiseShip("Princess",2000,5000));
等
[编辑]忘了你也需要打印它
使用简单的for循环进行打印,例如:
for (int i = 0; i < myArray.size(); i++) {
System.out.println(myArray.get(i).toString());
}
注意 - 这不是我不想跳过你的学习过程的确切答案。但这至少应该让你知道你可以走的道路......
答案 1 :(得分:0)
Ship
是“基础”父类,它将所有其他类放入一个共同的族中。这意味着CruiseShip
和CargoShip
实际上可以伪装成Ship
。这是Polymorphism的基石,也是使面向对象程序如此强大的功能之一。
根据您的示例代码,您只需创建一个类型为Ship
的数组,例如......
Ship[] ships = new Ship[5];
然后你只需要用各种各样的船来填充这个数组......
ships[0] = new CargoShip("Lolli Pop", 1965, 1990);
ships[1] = new CruiseShip("Love Boat", 1980, 8);
这意味着,每个元素“充当”Ship
,因为CargoShip
和CruiseShip
继承自Ship
,这使他们有能力这样做,因为他们是“船只”
由于Ship
的显示信息是由toString
方法定义的,因此您只需使用System.out.println(instanceOfShip)
进行打印即可。例如......
for (Ship ship : ships) {
System.out.println(ship);
}
详细了解Inheritance和Arrays了解详情
它可能看起来令人困惑和令人生畏,但一旦你理解了继承的基础知识,它将变得非常明显和非常强大