图片显示任务:
首先,我很抱歉,因为我表达了自己的不好意思。
我有这样的任务,我不需要你为我做这件事。
Vehicle
是Sedan
的父类(原因是Sedan类是字符串类型)。
has a
?P.S。如果您需要我已编写的代码,我会告诉您。
所以这是我的父车辆类:
public class Vehicle {
private int vehicleNumber;
protected int fuelTankSize;
protected int maxSpeed;
protected Owner owner;
//1
public Vehicle(int vehicleNumber){
this.vehicleNumber = vehicleNumber;
}
//2
public Vehicle(int vehicleNumber, int fuelTankSize) {
this.vehicleNumber = vehicleNumber;
this.fuelTankSize = fuelTankSize;
}
//3
public Vehicle(int vehicleNumber, int fuelTankSize, int maxSpeed) {
this.vehicleNumber = vehicleNumber;
this.fuelTankSize = fuelTankSize;
this.maxSpeed = maxSpeed;
}
//4
public Vehicle(int vehicleNumber, int fuelTankSize, int maxSpeed, Owner owner) {
this.vehicleNumber = vehicleNumber;
this.fuelTankSize = fuelTankSize;
this.maxSpeed = maxSpeed;
this.owner = owner;
}
//1
public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed (int maxSpeed){
this.maxSpeed = maxSpeed;
}
//2
protected int getFuelTankSize(){
return fuelTankSize;
}
protected void setFuelTankSize (int fuelTankSize){
this.fuelTankSize = fuelTankSize;
}
//3
public Owner getOwner(){
return owner;
}
public void setOwner (Owner owner){
this.owner = owner;
}
}
小孩轿车:
public class Sedan extends Vehicle {
private String registrationIndex;{
}
public Sedan (int vehicleNumber, int fuelTankSize, int maxSpeed, String registrationIndex, Owner owner) {
super(vehicleNumber, fuelTankSize, maxSpeed, owner);
this.setRegistrationIndex (registrationIndex);
}
public String getRegistrationIndex (){
return registrationIndex;
}
public void setRegistrationIndex (String registrationIndex) {
this.registrationIndex = registrationIndex;
}
}
第二个没有错误的环球儿童:
public class Universal extends Vehicle {
private int trunkSize;
public Universal (int vehicleNumber, int fuelTankSize, int maxSpeed, int trunkSize, Owner owner) {
super(vehicleNumber, fuelTankSize, maxSpeed, owner);
this.setTrunkSize (trunkSize);
}
public int getTrunkSize() {
return trunkSize;
}
public void setTrunkSize(int trunkSize) {
this.trunkSize = trunkSize;
}
public void printDescription() {
super.printDescription();
System.out.println("Universalo bagažinės tūris: " + getTrunkSize() + "l.");
}
}
和一些神秘的(对我而言)所有者类:
public class Owner {
public String firstName;
public String lastName;
public Owner (String firstName){
this.firstName = firstName;
}
public Owner (String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
}
添加了VechileTest进行测试:
public class VehicleTest {
public static void main(String[] args) {
Vehicle vehicleInf = new Vehicle (1, 45, 260);
Universal universalInf = new Universal(2, 50, 220, 70);
Sedan sedanInf = new Sedan (3, 40, 180, "AVA 123");
vehicleInf.printDescription();
universalInf.printDescription();
sedanInf.printDescription();
}
}
答案 0 :(得分:2)
嗯,首先,我建议您阅读UML类图的一个很好的教程/解释,例如this。
在了解了基础知识之后,将其转换为Java代码应该很容易。
我将为您提供Universal
课程的代码以及Vehicle
的开头代码。其余的你必须自己做。
环球类:
public class Universal extends Vehicle {
private int trunkSize;
public int getTrunkSize() {
return this.trunkSize;
}
public void setTrunkSize(int trunkSize) {
this.trunkSize = trunkSize;
}
}
如您所见,类框内的第一个块指的是变量。 -
和+
表示可见性(-
为私有,+
为公开)。
下一个块是关于方法,指定可见性,返回类型,方法名称和参数(类型和名称)。
Universal
和Vehicle
之间的箭头表示继承关系(请参阅代码Universal extends Vehicle
)。
因此,所有图表都是您班级的施工计划;至少对于静态部分,意味着他们可以拥有的关系和状态。
班级的开始:
public class Vehicle {
private int vehicleNumber;
// the rest here ...
}
编辑: 好吧,既然我看到了你的代码,你似乎有一些误解:
Sedan类型不是String类型,它来自Sedan类型(扩展Vehicle)。只是Sedan类型中的新成员变量是String类型,无关紧要。
第一个问题:Vehicle
类是Sedan
的基类(父)类。你不要对它做任何事情,继承是从孩子对父母的表达,而不是相反。 Vehicle
通常应该被声明为抽象的(因为您无法创建泛型Vehicle
的实例),但这不在图中。
has a
关系就是这样。它表示一个类有另一个类作为它的成员(已经在类图中冗余地表达了),所以没有什么可做的。此外,您的代码还有一些问题:
Sedan
变量后,{}
有一对超级registrationIndex
。Vehicle
没有默认构造函数,因此您必须从Sedan
类调用此构造函数(或从Vehicle
中删除构造函数。Universal
类使用trunkSize调用Vehicle
构造函数,而Vehicle
构造函数则需要vehicleNumber
。答案 1 :(得分:0)
您的Vehicle
类没有无参数构造函数,这意味着Universal
和Sedan
必须显式调用其中一个(super(...);
)。您在Universal
中执行此操作(虽然您传递的是行李箱大小而不是Vehicle
的构造函数所期望的车辆号码),但在Sedan
中没有。
至于第二个问题:OOP中的两个主要关系是is a
和has a
。差异很容易解释如下:
is a
表示它继承了其他内容的某些属性,has a
表示它具有对其他内容的引用。