寫了幾天了,這個錯誤解決不了,求解
為什么我寫到main的時候,在創建數值時一直報The constructor PassengerCar(int, String, String, String) is undefined這個錯,哪個大神幫你解答一下
package com.imooc;
父類
public class car {
?? ?private int number;//車輛編號
?? ?private String name;//車輛名稱
?? ?private float price;//車輛租金
?? ?public int getNumber() {
?? ??? ?return number;
?? ?}
?? ?public void setNumber(int number) {
?? ??? ?this.number = number;
?? ?}
?? ?public String getName() {
?? ??? ?return name;
?? ?}
?? ?public void setName(String name) {
?? ??? ?this.name = name;
?? ?}
?? ?
?? ?public float getPrice() {
?? ??? ?return price;
?? ?}
?? ?public void setPrice(float price) {
?? ??? ?this.price = price;
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return? "序號:" +number+"\t"+"名稱:"+name+"\t"+"價格:"+price+"\t";
?? ?}
?? ?
}
子類? 載客量
package com.imooc;
public class PassengerCar extends car {
?? ?private int passenger;
?? ?
?? ?public int getPassenger() {
?? ??? ?return passenger;
?? ?}
?? ?public void setPassenger(int passenger) {
?? ??? ?this.passenger = passenger;
?? ?}
?? ?public PassengerCar(int newNumber,String newName,float newPrice,int passenger) {
?? ??? ?super.setNumber(newNumber);
?? ??? ?super.setName(newName);
?? ??? ?super.setPrice(newPrice);
?? ??? ?this.setPassenger(passenger);
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return super.toString()+"載客量:"+passenger;
?? ?}?? ?
}
子類 載貨量
package com.imooc;
public class TruckCar extends car {
?? ?private double capacity;
?? ?public double getCapacity() {
?? ??? ?return capacity;
?? ?}
?? ?public void setCapacity(double capacity) {
?? ??? ?this.capacity = capacity;
?? ?}
?? ?public TruckCar(int newNumber,String newName,float newPrice,double capacity) {
?? ??? ?super.setName(newName);
?? ??? ?super.setNumber(newNumber);
?? ??? ?super.setPrice(newPrice);
?? ??? ?this.setCapacity(capacity);
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return super.toString()+"載貨量:"+capacity;
?? ?}
?? ?
}
子類? 皮卡
package com.imooc;
public class PickCar extends car {
?? ?private int passenger;
?? ?private double capacity;
?? ?
?? ?public int getPassenger() {
?? ??? ?return passenger;
?? ?}
?? ?public void setPassenger(int passenger) {
?? ??? ?this.passenger = passenger;
?? ?}
?? ?public double getCapacity() {
?? ??? ?return capacity;
?? ?}
?? ?public void setCapacity(double capacity) {
?? ??? ?this.capacity = capacity;
?? ?}
?? ?public PickCar(int newNumber,String newName,float newPrice,int passenger,double capacity) {
?? ??? ?super.setName(newName);
?? ??? ?super.setNumber(newNumber);
?? ??? ?super.setPrice(newPrice);
?? ??? ?this.setPassenger(passenger);
?? ??? ?this.setCapacity(capacity);
}
?? ?@Override
?? ?public String toString() {
?? ??? ?return super.toString()+"載客量:"+passenger+"\t"+"載貨量:"+capacity;
?? ?}
?? ?
}
main
package com.imooc;
import java.util.Scanner;
public class Initial {
?? ?public static void main(String[] args) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?//創建汽車對象
?? ?car[] cars = new car[5];
?? ?cars[0]= new PassengerCar(1,"奧迪A4","500f","4");
?? ?cars[1]=new TruckCar(2,"松花江","400f","4")
?? ??? ?}
?? ?}
2019-05-30
構造器的參數類型是(int,String,float,int),但是你創建的時候確是(int,String,String,String)
2019-05-29
??? public PassengerCar(int newNumber,String newName,float newPrice,int passenger) {
??????? super.setNumber(newNumber);
??????? super.setName(newName);
??????? super.setPrice(newPrice);
??????? this.setPassenger(passenger);
??? }
這里設計的不是很好
首先super.setNumber(newNumber);這個只是初始化了父類的Number屬性,但又因為你設計的父類的屬性是私有的,私有屬性是不可以被繼承的。所以這個初始化,你的子類只有一個屬性被初始化了,就是passenger,沒有其他屬性了。
還有,創建對象是car類首字母要大寫
建議:
首先將父類公有化
然后
建議是:
首先將父類屬性公有化,這樣子類才繼承有父類那3個屬性
其次private在同一類中是可以訪問的,這里完全可以這樣子寫
public PassengerCar(int newNumber,String newName,float newPrice,int passenger) {
??????? //初始化子類屬性
??????? this.setNumber=newNumber;
??????? this.setName=newName;
??????? this.setPrice=newPrice;
??????? this.setPassenger(passenger);
??? }
2019-05-29
希望樓主無論解決與否給個回復,謝謝~
2019-05-29
創建汽車對象的時候,對象不應該用數組。
?car[] cars = new car[5]; 實際上創建的實際上是一個car類型的數組
換成 car? cars = new car();
cars.PassengerCar(1,"奧迪A4","500f","4");
?cars.TruckCar(2,"松花江","400f","4");
樓主這樣試一下,應該可以