我是新来的Java,已经参加了几个星期的课程,并被要求完成一个包含以下信息的项目:
>
设计具有以下数据字段的船舶等级:
>
船舶建造年份的数据字段(int)。
构造函数和适当的访问器和变异器。
显示船名和建造年份的toString方法。
设计一个CruiseShip子类,扩展船舶类。CruiseShip类应具有以下内容:
>
最大乘客数的额外数据字段(int)。
构造函数和适当的访问器和变异器。
重写基类中的toString方法的toString方法。CruiseShip类的toString方法还应包括最大乘客限制。
设计一个扩展Ship类的CargoShip类。CargoShip类应具有以下内容:
>
以吨位(int)为单位的货物容量的额外数据栏。
构造函数和适当的访问器和变异器。
重写基类中toString方法的toString方法。CargoShip类的toString方法还应包括货物吨位。
在适当的类中包括一个equals方法来测试两艘船是否相等——如果它们具有相同的名称并且在同一年建造,则应将其视为相等。
演示程序(ShipTester)中的类,该程序具有Ship对象数组(至少5个)。将各种Ship、CruiseShip和CargoShip对象分配给数组元素(您可以对对象和数据进行硬编码)并打印出初始船舶配置。显示您可以在船舶样本上同时使用访问器和修改器方法(同样,如果您愿意,您可以在此处对方法参数进行硬编码)。
我理解问题的依据,我做了以下工作:
船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 + "]";
}
}
游船。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 + "]";
}
}
货船。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...
}
}
我不知道该在主要方法中加入什么...我知道我必须创建一系列船只,但我不知道如何使用货船、游轮等...
我应该有的输出:
展示船:船[名称:安妮女王复仇年建造:1701]
邮轮[船[名称:企业号建造年份:2245],乘客:2400]
货船[船名:黑珍珠号建造年份:1699],吨位:50000]
游轮[船名:美国航海家号建造年份:2371],乘客:2800]
货船[船名:胜利年建造:1790],吨位:33100]
Ship是“基本”父类,它将所有其他类放入一个公共族中。这意味着邮轮和货船实际上可以伪装成船。这是多态性的基石,也是使面向对象程序如此强大的特性之一。
根据您的示例代码,您只需创建一个类型为Ship
的数组,例如...
Ship[] ships = new Ship[5];
然后,您只需用各种船只填充这个阵列......
ships[0] = new CargoShip("Lolli Pop", 1965, 1990);
ships[1] = new CruiseShip("Love Boat", 1980, 8);
这意味着,每个元素“充当”一艘船舶,因为从船舶继承来的货船和邮轮,这赋予了它们这样做的能力,因为它们是“船舶”
因为Ship
的显示信息是由它的toString
方法定义的,所以您可以简单地使用System.out.println(instanceOfShip)
来打印它。例如...
for (Ship ship : ships) {
System.out.println(ship);
}
更详细地了解继承和数组
这可能看起来令人困惑和望而生畏,但一旦你了解了继承的基础知识,它就会变得非常明显和强大
扩展到Hovercraft所说的内容,但您可能希望对对象数组使用ArrayList。
创建对象的Arraylist
实例
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());
}
注意-这不是确切的答案,我不想跳过你的学习过程。但这至少应该给你一个想法,你可以采取的道路。。。
本文向大家介绍理解javascript对象继承,包括了理解javascript对象继承的使用技巧和注意事项,需要的朋友参考一下 先从一个问题进行研究深入,什么是javascript对象继承? 比如我们有一个“动物”对象的构造函数。 还有一个“猫”对象的构造函数。 我们知道猫也属于动物,如果这个猫对象想要继承动物对象的属性,我们该怎么做呢? 构造函数绑定 使用构造函数绑定是最简单的方法,使用call
本文向大家介绍浅谈Java 对于继承的初级理解,包括了浅谈Java 对于继承的初级理解的使用技巧和注意事项,需要的朋友参考一下 概念:继承,是指一个类的定义可以基于另外一个已存在的类,即子类继承父类,从而实现父类的代码的重用。两个类的关系:父类一般具有各个子类共性的特征,而子类可以增加一些更具个性的方法。类的继承具有传递性,即子类还可以继续派生子类,位于上层的类概念更加抽象,位于下层的类的概念更加
问题内容: 测试类,主要方法: 由于以下原因,我无法获得此信息: B类 继承自 A类 (公共成员),并且无法查看/继承私有功能。因此,在 B类中 ,我们可以调用 talk() 。 //因为它是由父类继承的。 现在,在 talk()* 方法中,由于在 类B中 定义了 sayIt() ,因此可以调用 sayIt() , * __ 我希望将呼叫 B.sayIt() 时进行 this.sayIt() 被执
本文向大家介绍Java单例模式继承覆盖多态原理详解,包括了Java单例模式继承覆盖多态原理详解的使用技巧和注意事项,需要的朋友参考一下 1、单例模式: 1)提出原因 是由gof 也就是四人组提出来的。为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销。因为外面程序可以通过new的方法直接调用类里面的构造方法。导致该类的对象不止一个。 2)定义 单例模式的意思就是
问题内容: 有什么理由禁止Java中的继承,例如通过使用最终类或使用单个私有无参数构造函数的类?将方法定型的充分理由是什么? 问题答案: 这里最好的参考是Joshua Bloch的出色著作“ Effective Java”的第19项,称为“继承的设计和文档,否则将禁止继承”。(在第二版中是第17项,在第一版中是第15项。)你应该阅读它,但我将进行总结。 如果祖先不是为了继承而来的,则继承的类与父母
本文向大家介绍C++中的封装、继承、多态理解,包括了C++中的封装、继承、多态理解的使用技巧和注意事项,需要的朋友参考一下 封装(encapsulation):就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,特定