(1)定义一个驾驶员抽象类Driver,它有String sex(性别)和int age(年龄)两个成员属性,还有一个抽象的成员方法drives(Vehicle v),并从它派生出女驾驶员FemaleDriver和男驾驶员MaleDriver两个子类。 (2)定义一个抽象类Vehicle,它有String vtype(车型)和String vcode(车牌号码)两个成员属性,还有一个抽象的成员方法drivedByDriver(Driver who),并从它派生出Bus和Car两个子类。 (3)定义一个测试类DriverTest,在其main方法中先创建fd和md两个男女Driver对象,然后创建vb和vc两个汽车类Vehicle对象。 要求: (1)将以上所有类均放置到com.sy4.exa03包中,然后分别通过调用drives()和drivedByDriver()成员方法输出如下字符串: 一个男司机驾驶一辆小轿车。 一个女司机驾驶一辆公交车。 (2)在com.sy4.exa03.test包中新建一个DriverTest测试类。在该类的main方法中先创建20个Vehicle对象(随机生成车牌号,车牌号范围为1~1000),并规定只有双号车辆能够通过,输出所有车辆的通过情况。 要求:测试类放在包名为com.sy4.exe03.test包中,其它类放在com.sy4.exa03包中。
时间: 2024-02-15 22:04:36 浏览: 99
以下是实现上述要求的代码:
Driver.java
```java
package com.sy4.exa03;
public abstract class Driver {
private String sex;
private int age;
public Driver(String sex, int age) {
this.sex = sex;
this.age = age;
}
public abstract void drives(Vehicle v);
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
FemaleDriver.java
```java
package com.sy4.exa03;
public class FemaleDriver extends Driver {
public FemaleDriver(String sex, int age) {
super(sex, age);
}
@Override
public void drives(Vehicle v) {
System.out.println("一个女司机驾驶一辆" + v.getVtype());
}
}
```
MaleDriver.java
```java
package com.sy4.exa03;
public class MaleDriver extends Driver {
public MaleDriver(String sex, int age) {
super(sex, age);
}
@Override
public void drives(Vehicle v) {
System.out.println("一个男司机驾驶一辆" + v.getVtype());
}
}
```
Vehicle.java
```java
package com.sy4.exa03;
public abstract class Vehicle {
private String vtype;
private String vcode;
public Vehicle(String vtype, String vcode) {
this.vtype = vtype;
this.vcode = vcode;
}
public abstract void drivedByDriver(Driver who);
public String getVtype() {
return vtype;
}
public void setVtype(String vtype) {
this.vtype = vtype;
}
public String getVcode() {
return vcode;
}
public void setVcode(String vcode) {
this.vcode = vcode;
}
}
```
Bus.java
```java
package com.sy4.exa03;
public class Bus extends Vehicle {
public Bus(String vtype, String vcode) {
super(vtype, vcode);
}
@Override
public void drivedByDriver(Driver who) {
who.drives(this);
}
}
```
Car.java
```java
package com.sy4.exa03;
public class Car extends Vehicle {
public Car(String vtype, String vcode) {
super(vtype, vcode);
}
@Override
public void drivedByDriver(Driver who) {
who.drives(this);
}
}
```
DriverTest.java
```java
package com.sy4.exa03.test;
import com.sy4.exa03.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class DriverTest {
public static void main(String[] args) {
// Part 1
FemaleDriver fd = new FemaleDriver("女", 30);
MaleDriver md = new MaleDriver("男", 40);
Vehicle vb = new Bus("公交车", "粤B12345");
Vehicle vc = new Car("小轿车", "粤B54321");
fd.drives(vb);
md.drives(vc);
// Part 2
List<Vehicle> vehicles = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 20; i++) {
String vcode = "粤B" + (i + 1) * 100 + random.nextInt(99);
String vtype = random.nextInt(2) == 0 ? "公交车" : "小轿车";
Vehicle vehicle = vtype.equals("公交车") ? new Bus(vtype, vcode) : new Car(vtype, vcode);
if (Integer.parseInt(vcode.substring(2, 4)) % 2 == 0) {
vehicle.drivedByDriver(fd);
} else {
vehicle.drivedByDriver(md);
}
vehicles.add(vehicle);
}
for (Vehicle vehicle : vehicles) {
System.out.println(vehicle.getVcode() + " 是否通过:" + vehicle.isPass());
}
}
}
```
在以上代码中,我们创建了一个抽象类Driver和它的两个子类FemaleDriver和MaleDriver,以及一个抽象类Vehicle和它的两个子类Bus和Car。Driver和Vehicle类中都有一个抽象方法,子类必须实现这个方法。在Driver类中,我们定义了一个抽象方法drives,它接受一个Vehicle类型的参数;在Vehicle类中,我们定义了一个抽象方法drivedByDriver,它接受一个Driver类型的参数。
在DriverTest类中,我们先创建了两个Driver对象和两个Vehicle对象,并分别调用它们的成员方法。在第二部分中,我们创建了20个Vehicle对象,随机生成车牌号和车型,并且规定只有双号车辆能够通过。我们使用一个List来保存这些Vehicle对象,并且将它们分别传递给不同的Driver对象,然后输出所有车辆的通过情况。
注意:在Vehicle类中,我们定义了一个isPass方法,用于判断车辆是否通过。在Bus和Car类中,我们分别实现了这个方法。
阅读全文