0

賃借人の名前、郵便番号、レンタカーのサイズ、1 日あたりのレンタル料金、レンタル期間 (日数)、および合計レンタル料金を保持するフィールドを含む CarRental という名前のクラスを作成します。このクラスには、すべてのレンタル データが 1 日あたりの料金と合計料金を受け入れることを要求するコンストラクターが含まれています。料金は、車のサイズに基づいて計算されます: エコノミーは 1 日あたり 29.99 ドル、ミッドサイズは 1 日あたり 38.99 ドル、またはフル サイズは 1 日あたり 43.50 ドル. このクラスには、すべてのレンタル データを表示する display() メソッドも含まれています。

LuxuryCarRental という名前のサブクラスを作成します。このクラスは、レンタル料金を 1 日あたり 79.99 ドルに設定し、1 日あたり 200 ドル追加で運転手を含めるオプションに応答するようユーザーに促します。親クラスの display() メソッドをオーバーライドして、運転手料金の情報を含めます。レンタルに必要なデータをユーザーに要求し、正しい型のオブジェクトを作成する UseCarRental という名前のアプリケーションを作成します。レンタル料金の合計を表示します。

ファイルを CarRental として保存します。java、LuxuryCarRental. java、および UseCarRental. ジャワ

public class CarRental
{
String name;
int zip;
String size;
double dailyFee;
int days;
double total;

public CarRental(String size)
{

if(size.charAt(0)=='e')
  dailyFee = 29.99;
else if(size.charAt(0)=='m')
  dailyFee = 38.99;
else
  dailyFee =43.50;
}
public String getname()
{
  return name;
}
public int getzip()
{
  return zip;
}
public String getsize()
{
return size;
}
public int getdays()
{
  return days;
}
public void computetotal(int days)
{
total = dailyFee*days;
}
public void print()
{
System.out.println("The cost of your rental car is $" + total);
}
} 






public class LuxuryCarRental extends CarRental
{
public LuxuryCarRental(String size, int days)
{
super(size);
}
public void computetotal1()
{
super.computetotal(days);
dailyFee = 79.99;
 total = dailyFee;
System.out.println(days);    //trying to see if days still 0
}
}






import javax.swing.*;
import java.util.Scanner;
public class UseCarRental
{
public static void main(String args[]) throws Exception
{
int days;
String name;
int zip;
String size;
Scanner inputDevice = new Scanner(System.in);
System.out.println("Enter days: ");
days= inputDevice.nextInt();
System.out.println("Enter name: ");
name = inputDevice.next();
System.out.println("Enter zip: ");
zip = inputDevice.nextInt();
System.out.println("Enter size: ");
size = inputDevice.next();
CarRental econ = new CarRental(size);
econ.computetotal(days);
econ.print();
CarPhone full = new CarPhone(size, days);
full.computetotal1();
full.print();
} 
}
4

2 に答える 2

0

両方のクラスのどこにも日を初期化していないため、getdays は 0 を返します。アクセスする前に日を初期化してください。

CarRental クラスのコンストラクターで、次のように引数として日を作成します。

public CarRental(String size, int days)
{

   if(size.charAt(0)=='e')
      dailyFee = 29.99;
   else if(size.charAt(0)=='m')
      dailyFee = 38.99;
   else
      dailyFee =43.50;
   this.days = days;
}

LuxuryCarRental のコンストラクターで、次のようにします。

public LuxuryCarRental(String size, int days)
{
   super(size, days);
}
于 2013-03-29T21:50:02.037 に答える
0

LuxuryCarRental では、日に対して何もしていません。コンストラクターはそれを引数として受け取りますが、何もしません。理想的には、CarRental オブジェクト コンストラクターに渡す必要がありますが、いずれにせよ、追加します。

this.days = days;

LuxuryCarRental コンストラクター、または新しい引数を持つ CarRental コンストラクターに。

computetotal メソッドの名前を変更する必要もありません。同じ名前のままにしておきます。子オブジェクトがその親からの実装の詳細をオーバーライドします。ポリモーフィズムを調べてください: http://en.wikipedia.org/wiki/Polymorphism_in_object-directional_programming

また、コードをインデントして読みやすくしますhttp://en.wikipedia.org/wiki/Indent_style

于 2013-03-29T21:48:36.843 に答える