关于子类定义final常量的问题

来源:12-2 项目问题解析 1

徊雅0

2016-07-05 22:18

首先定义了父类Car;

然后定义了多个子类,如Aodi;

为了后续录入车辆时,同类车型只需录入型号,不再录入车名,所以在子类中定义了final变量“”“奥迪”;但运行的结果却是车名name永远为空,无法读取如“奥迪”等信息。

请问我错在了哪里???

代码如下:

package com.imook2;

public class Car {
 public int No;
 public String Name;
 public String Xinghao;
 public float Price;
 public String Type;
 public int TypeNo;
 public int Carring;
 public int CarringNo;
 public String CarringDanwei;
 public void DoType(){
  if(TypeNo==1){
  Type="载人";
 }else if(TypeNo==2){
  Type="载物";
 }else{
  System.out.println("输入有误!");
 }
}
 public void DoCarringDanwei(){
  if(CarringNo==1){
   CarringDanwei="p";
 }else if(CarringNo==2){
  CarringDanwei="t";
 }else{
  System.out.println("输入有误!");
 }
}
 public void out(){
  System.out.println(No+".  "+Name+Xinghao+"  "+Price+"元/天        "+Type+":"+Carring+CarringDanwei);
 }
}

package com.imook2;

public class Aodi extends Car {
 public int No;
 final public String Name="奥迪";
 public String Xinghao;
 public float Price;
 public String Type;
 public int TypeNo;
 public int Carring;
 public String CarringDanwei;
 public int CarringNo;
 
}

package com.imook2;

public class Initail {

 public static void main(String[] args) {
  // TODO 自动生成的方法存根
    Car car1=new Aodi();
    Car car2=new Pickup();
    Car car3=new Songhuajiang();
    Car car4=new Golden();
    Car car5=new Mzd();
   // car1.Name="奥迪";
    car1.No=1;
    car1.Xinghao="A4";
    car1.Price=500;
    car1.TypeNo=1;
    car1.Carring=4;
    car1.CarringNo=1;
    car2.No=2;
    car2.Xinghao="";
    car2.Price=250;
    car2.TypeNo=2;
    car2.Carring=80;
    car2.CarringNo=2;
    car3.No=3;
    car3.Xinghao="12";
    car3.Price=350;
    car3.TypeNo=1;
    car3.Carring=7;
    car3.CarringNo=1;
    car4.No=4;
    car4.Xinghao="V8";
    car4.Price=1500;
    car4.TypeNo=1;
    car4.Carring=45;
    car4.CarringNo=1;
    car5.No=5;
    car5.Xinghao="6";
    car5.Price=400;
    car5.TypeNo=1;
    car5.Carring=4;
    car5.CarringNo=1;
    car1.DoType();
    car1.DoCarringDanwei();
    car2.DoType();
    car2.DoCarringDanwei();
    car3.DoType();
    car3.DoCarringDanwei();
    car4.DoType();
    car4.DoCarringDanwei();
    car5.DoType();
    car5.DoCarringDanwei();
    System.out.println("序号       型号        价格         载人/载物          载重量");
    car1.out();
    car2.out();
    car3.out();
    car4.out();
    car5.out();
 }

}

运行结果:

序号       型号        价格         载人/载物          载重量
1.  nullA4  500.0元/天        载人:4p
2.  null  250.0元/天        载物:80t
3.  null12  350.0元/天        载人:7p
4.  nullV8  1500.0元/天        载人:45p
5.  null6  400.0元/天        载人:4p

 

写回答 关注

3回答

  • fan311
    2016-07-06 12:19:53
    已采纳

    1.楼主不妨直接在intial类中定义

    final String carName="奥迪";

    然后令

    car1.Name=carName;

    car2.Name=carName;

    ......

    2.一开始楼主在Audi中重新定义了一个< final public String Name="奥迪";>这个具体为啥不对我也不是很清楚,但是这样肯定不能修改父类中的变量,因为Java中没有对变量的重写,只有方法重写。

    3.楼主还可以通过重写子类构造方法以达到目的

    Aodi(){

    super.Name="奥迪";

    }

    萌新一枚,表达一下我的想法。

    徊雅0

    非常感谢!

    2016-07-07 10:41:43

    共 1 条回复 >

  • mjka5632
    2016-07-06 11:39:17

    你在car父类里定义常量奥迪?那是不对的啊!你这样会造成无法赋值的情况!已经是常量了!无法改变原有值了

  • mjka5632
    2016-07-06 11:34:08

    你的常量奥迪都没用呀!

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

531106 学习 · 6299 问题

查看课程

相似问题