问答详情
源自:10-1 Java 中的多态

用笨办法写的作业 有老师或大大看看达标不?

我用笨办法写的 写了5个类 

一个父类 五个子类 一个main类 想知道如何能优化 更省代码省空间呢?

如下:

父类 Transp

public class Transp {

public String transpName;

public String transpStyle;

public int transpNum;


public String getTranspName() {

return transpName;

}

public void setTranspName(String transpName) {

this.transpName = transpName;

}

public String getTranspStyle() {

return transpStyle;

}

public void setTranspStyle(String transpStyle) {

this.transpStyle = transpStyle;

}

public int getTranspNum() {

return transpNum;

}

public void setTranspNum(int transpNum) {

this.transpNum = transpNum;

}

public void setFields() {

setTranspName(null);

setTranspStyle(null);

setTranspNum(0);

}

}

子类 Bus

public class Bus extends Transp {


public void setFields() {

setTranspName("Bus");

setTranspStyle("land");

setTranspNum(40);

}

}

子类 Plane

public class Plane extends Transp {


public void setFields() {

setTranspName("Plane");

setTranspStyle("air");

setTranspNum(100);

}

}

子类 Ship

public class Ship extends Transp {


public void setFields() {

setTranspName("Ship");

setTranspStyle("sea");

setTranspNum(200);

}

}

子类 SpacePlane

public class SpacePlane extends Transp {


public void setFields() {

setTranspName("SpacePlane");

setTranspStyle("spcace");

setTranspNum(20);

}

}

子类 Train

public class Train extends Transp {


public void setFields() {

setTranspName("Train");

setTranspStyle("rail");

setTranspNum(500);

}

}

main类

import java.util.Scanner;


public class mainTransp {

public static void main(String[] args) {

double scannerNum;

Scanner input = new Scanner(System.in);

for (int i = 0; i < 6; i++) {

System.out.println("请输入查询序号:  1为Bus 2为Plane 3为Ship 4为SpacePlane 5为Train 0为查询所有");

scannerNum = input.nextDouble();

if (scannerNum < 0 || scannerNum > 5 || scannerNum != (int) scannerNum) {

System.out.println("输入有误 请重新输入!");

continue;

} else {

if (scannerNum == 1 || scannerNum == 0) {

Bus set = new Bus();

set.setFields();

System.out.println("运输方式:" + set.getTranspName() + "\n运输路线为:" + set.getTranspStyle() + "\n运送人数为:"

+ set.getTranspNum() + "\n");

if (scannerNum != 0) {

break;

}

}

if (scannerNum == 2 || scannerNum == 0) {

Plane set = new Plane();

set.setFields();

System.out.println("运输方式:" + set.getTranspName() + "\n运输路线为:" + set.getTranspStyle() + "\n运送人数为:"

+ set.getTranspNum() + "\n");

if (scannerNum != 0) {

break;

}

}

if (scannerNum == 3 || scannerNum == 0) {

Ship set = new Ship();

set.setFields();

System.out.println("运输方式:" + set.getTranspName() + "\n运输路线为:" + set.getTranspStyle() + "\n运送人数为:"

+ set.getTranspNum() + "\n");

if (scannerNum != 0) {

break;

}

}

if (scannerNum == 4 || scannerNum == 0) {

SpacePlane set = new SpacePlane();

set.setFields();

System.out.println("运输方式:" + set.getTranspName() + "\n运输路线为:" + set.getTranspStyle() + "\n运送人数为:"

+ set.getTranspNum() + "\n");

if (scannerNum != 0) {

break;

}

}

if (scannerNum == 5 || scannerNum == 0) {

Train set = new Train();

set.setFields();

System.out.println("运输方式:" + set.getTranspName() + "\n运输路线为:" + set.getTranspStyle() + "\n运送人数为:"

+ set.getTranspNum() + "\n");

if (scannerNum != 0) {

break;

}

}

break;

}

}


}

}


运行后需要获取输入数字 是0-5的整数则相应的输出对应的交通工具和运送人数  0为输出所有  错误数字有提示

输入0 运行如下:

请输入查询序号:  1为Bus 2为Plane 3为Ship 4为SpacePlane 5为Train 0为查询所有

0

运输方式:Bus

运输路线为:land

运送人数为:40


运输方式:Plane

运输路线为:air

运送人数为:100


运输方式:Ship

运输路线为:sea

运送人数为:200


运输方式:SpacePlane

运输路线为:spcace

运送人数为:20


运输方式:Train

运输路线为:rail

运送人数为:500


有老师指点一下吗 谢谢

提问者:慕移动2126195 2020-07-27 18:03

个回答

  • weixin_慕沐4565380
    2020-08-10 12:05:44
    已采纳

    说实话,你这写的太乱太杂了,开始用set和get来封装的时候transpName和transpStyle前面修饰符就要为private,你定义为public就没必要写get,set方法

    最后用个for来循环是为了防止乱输入来写的吗?没有必要呀,你现在学习的就那么多,没有必要去防止出现异常啥的来操作,就按照学到的知识写就行了,你要非得自己输入什么就显示什么,那就直接用switch来写,0-6代表啥输出啥就行,要不然就直接输出五种汽车得了,暂时不要想太多

    Bus set = new Bus();你这样new一个对象,对象名为set后面所有的都设置为set,你这不仔细看都不明白 set.getTranspName()这set哪来的,直接就定义为bus得了,一般定义名字都是看着就懂的,不然没注释仔细看太累了

  • qq_慕桂英2450110
    2020-08-14 10:28:36

    http://img4.mukewang.com/5f35f6aa0001a46819201032.jpg

    get和set方法和你的一样,就是选择的结构不一样,这样个人感觉方便

  • qq_慕桂英2450110
    2020-08-14 09:47:40

    选择的话可以改成switch,比较方便点,然后输出那个子类的属性也会比你的那个方便很多