这些交通工具都具有一个共同属性 载客量: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(" "); } } }
做完真的累,不过还有,有点成就感了,虽然说是模仿答案的,从模仿中学习,再理解。