为了账号安全,请及时绑定邮箱和手机立即绑定

为什么遍历数组重复输出最后一个值?

为什么遍历数组重复输出最后一个值?

weei2010 2017-09-19 21:51:12
package com.DiDi; import java.util.Scanner; public class Test { public void Test() { System.out.println("欢迎使用滴滴租车系统:"); System.out.println("您是否要租车:1 是 2否"); Scanner sc1=new Scanner(System.in); int sc1a=sc1.nextInt(); switch (sc1a) { case 1:{ System.out.println("您可租车的类型及其价目表:"); System.out.println("序号\t汽车名称\t租金\t容量"); Vehicle[] vehicles= {new Car(1, "奥迪A4", 400, 4),  new Car(2, "马自达6", 400, 4),  new Pickup(3,"皮卡雪",450,4,2),   new Car(4, "金龙", 800, 20),  new Cargo(5,"松花江", 400,4),  new Cargo(6, "依维柯", 1000, 20)}; for(int i=0;i<vehicles.length;i++) { //通过for遍历数组下标的方式输出所能租用的所有车辆的信息  System.out.println(vehicles[i]);  } break; } case 2:{ System.out.println("*****感谢使用滴滴租车系统*****"); break; } default:{ System.out.println("*****您输入的信息有误*****"); break; } } } public static void main(String[] args) { // TODO Auto-generated method stub Test aTest=new Test(); aTest.Test(); } } package com.DiDi; public abstract class Vehicle { public static int id; public static String name; public static int price; } package com.DiDi; public class Car extends Vehicle { static int sumManned; public Car(int id,String name,int price,int manned) { Vehicle.id=id; Vehicle.name=name; Vehicle.price=price; Car.sumManned=manned; } @Override public String toString() { return Vehicle.id+"\t"+name+"\t"+price+"\t"+sumManned; } } package com.DiDi; public class Pickup extends Vehicle { static int sumCargo; static int sumManned; public Pickup(int id, String name, int price, int manned, int cargo) { // TODO Auto-generated constructor stub this.id=id; this.name=name; this.price=price; this.sumManned=manned; this.sumCargo=cargo; } @Override public String toString() { return Vehicle.id+"\t"+name+"\t"+price+"\t"+sumManned+"\t"+sumCargo; } } package com.DiDi; public class Cargo extends Vehicle { static int sumCargo; public Cargo(int id, String name, int price, int cargo) { // TODO Auto-generated constructor stub this.id=id; this.name=name; this.price=price; this.sumCargo=cargo; } @Override public String toString() { return Vehicle.id+"\t"+name+"\t"+price+"\t"+sumCargo; } }如果输出内存的名称值是不同的,加上重写的toString之后遍历的时候输出值都是相同的,请问各位老哥为什么?
查看完整描述

1 回答

已采纳
?
慕神2962879

TA贡献6条经验 获得超0个赞

代码看不了

查看完整回答
反对 回复 2017-09-19
  • weei2010
    weei2010
    可以看了
  • 慕神2962879
    慕神2962879
    static修饰的成员变量:static修饰的成员变量也叫类变量或全局变量,在类被加载时static修饰的成员变量被初始化,与类关联,只要类存在,static变量就存在。一个static变量单独划分一块存储空间,不与具体的对象绑定在一起,该存储空间被类的各个对象所共享。也就是说当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例对象共用同一个static变量。static修饰的成员变量能在创建任何实例对象之前被访问,而不必引用任何对象,也就是说不管创建多少对象,static修饰的变量只占有一块内存。 所以你虽然new了Vehicle的几个子类,但是Vehicle的id,name这些静态成员变量被反复修改,最终和你最后一个new的子类传入的参数值相同
  • 慕神2962879
    慕神2962879
    忘记@了
点击展开后面1
  • 1 回答
  • 0 关注
  • 1155 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号