某租赁公司 为了满足不同客户的需求,准备了 有以下几种交通工具,
这些交通工具都具有一个共同属性 载客量:personCapacity;
有两个共同的方法 显示载客量 : showCapacity();显示功能:showfunction()
它们能满足不同情况下的交通需求:
轿车 能 跑 (run),
飞机 能 跑(run) 也能飞(fly);
轮船 能 游 (swim)
水上飞机 能 飞(fly) 也能 游(swim)
水陆两用飞机 能 跑(run) 能 飞(fly) 也能游(swim)
请使编写程序,实现交通工具类,方便用户选择该交通工具时,能输出它的载客量和功能。
在测试类中 测试通过
编码码要求体现面向对象的编程思想:封装,继承和多态
学校作业,照着答案来模仿的,再自己慢慢理解
先建一个交通工具的总父类Vehicle
package theme5_3;
public abstract class Vehicle {
private int personCapacity;
public void showCapacity() {
System.out.println("载客量:"+this.getPersonCapacity());
}
public abstract void say();//用于说出我是什么交通工具
public abstract void showFunction();//展示功能,这种抽象的,每个子类都会有
public Vehicle(int personCapacity)
{
this.personCapacity = personCapacity;
}
public int getPersonCapacity() {
return personCapacity;
}
public void setPersonCapacity(int personCapacity) {
this.personCapacity = personCapacity;
}
}
建一个会跑的接口Run,为轿车的借口功能run做准备
package theme5_3;
public interface Run {
public void run();//放一个空功能的借口,具体再另外实现
}
建轿车Car
package theme5_3;
public class Car extends Vehicle implements Run{//实施Run里面的功能
public Car(int personCapacity) {
super(personCapacity);
// TODO Auto-generated constructor stub
}
@Override
public void showFunction() {
// TODO Auto-generated method stub
run();
}
public void run() {
System.out.println("我能在路上跑,日行千里!");
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("轿车:");
}
}
轿车好了,做飞机,飞机有跑的功能,可以看出是轿车的子类,从轿车中继承下来就好了,再另外加个会飞的功能接口Fly,那这里先做接口Fly先
package theme5_3;
public interface Fly {
public void fly();
}
然后飞机继承轿车,再加上这个Fly接口
package theme5_3;
public class Plane extends Car implements Fly {
//飞机能跑,可以直接继承Car类,然后加个Fly的接口,又能飞了
public Plane(int personCapacity) {
super(personCapacity);
// TODO Auto-generated constructor stub
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("我能在天上飞!直插云霄!");
}
public void say() {
System.out.println("飞机:");
}
public void showFunction() {
run();
fly();
}
}
然后是轮船Ship,这里轮船会swim,那先做Swim的接口
package theme5_3;
public interface Swim {
public void swim();
}
接着把轮船做好
package theme5_3;
public class Ship extends Vehicle implements Swim{
public Ship(int personCapacity) {
super(personCapacity);
// TODO Auto-generated constructor stub
}
@Override
public void showFunction() {
// TODO Auto-generated method stub
swim();
}
public void say() {
System.out.println("轮船:");
}
@Override
public void swim() {
// TODO Auto-generated method stub
System.out.println("我能在水上游,浪里白条!");
}
}
接着做水上飞机WaterPlane,能飞能游(不能跑),那我就直接继承轮船Ship,再给他加个飞的接口FLy就好了
package theme5_3;
public class WaterPlane extends Ship implements Fly {
//继承轮船swim的功能
public WaterPlane(int personCapacity) {
super(personCapacity);
// TODO Auto-generated constructor stub
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("我是水上飞机,还能飞!");
}
public void showFunction() {
fly();
swim();
}
public void say() {
System.out.println("水上飞机:");
}
}
接着做水陆两用飞机,能 跑(run) 能 飞(fly) 也能游(swim),直接从飞机上继承,加个会游的接口Swim就好了(或者继承水上飞机,加个Run接口)
package theme5_3;
public class WaterLandPlane extends Plane implements Swim {
public WaterLandPlane(int personCapacity) {
super(personCapacity);
// TODO Auto-generated constructor stub
}
@Override
public void swim() {
// TODO Auto-generated method stub
System.out.println("水陆两用飞机,我还能游!");
}
public void showFunction() {
super.showFunction();//这里可以直接继承前者的功能
swim();
}
public void say() {
System.out.println("水陆两用飞机:");
}
}
最后是测试环节了
package theme5_3;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Vehicle[] v = new Vehicle[5];//新建一个交通工具的数组,有五种交通工具
//在分别定义他们的载客量,种类
v[0] = new Car(5);//小车一般五座的
v[1] = new Plane(300);//
v[2] = new Ship(400);
v[3] = new WaterPlane(500);
v[4] = new WaterLandPlane(1000);
System.out.println("35号同学的Java作业,累死我了!照着答案抄都累,还要花很长时间去理解");
for(Vehicle x:v)//x,选择的数字,v车型,即数组名
{
x.say();//说出我是什么交通工具
x.showCapacity();//展示载客量
x.showFunction();//展示有什么功能
System.out.println(" ");
}
}
}
做完真的累,不过还有,有点成就感了,虽然说是模仿答案的,从模仿中学习,再理解。