關(guān)于子類定義final常量的問題
首先定義了父類Car;
然后定義了多個子類,如Aodi;
為了后續(xù)錄入車輛時,同類車型只需錄入型號,不再錄入車名,所以在子類中定義了final變量“”“奧迪”;但運(yùn)行的結(jié)果卻是車名name永遠(yuǎn)為空,無法讀取如“奧迪”等信息。
請問我錯在了哪里???
代碼如下:
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("序號?????? 型號??????? 價(jià)格???????? 載人/載物????????? 載重量");
??? car1.out();
??? car2.out();
??? car3.out();
??? car4.out();
??? car5.out();
?}
}
運(yùn)行結(jié)果:
序號?????? 型號??????? 價(jià)格???????? 載人/載物????????? 載重量
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
?
2016-07-06
1.樓主不妨直接在intial類中定義
final String carName="奧迪";
然后令
car1.Name=carName;
car2.Name=carName;
......
2.一開始樓主在Audi中重新定義了一個<?final public String Name="奧迪";>這個具體為啥不對我也不是很清楚,但是這樣肯定不能修改父類中的變量,因?yàn)镴ava中沒有對變量的重寫,只有方法重寫。
3.樓主還可以通過重寫子類構(gòu)造方法以達(dá)到目的
Aodi(){
super.Name="奧迪";
}
萌新一枚,表達(dá)一下我的想法。
2016-07-06
你在car父類里定義常量奧迪?那是不對的?。∧氵@樣會造成無法賦值的情況!已經(jīng)是常量了!無法改變原有值了
2016-07-06
你的常量奧迪都沒用呀!