2. Mick’s Wicks makes candles in various sizes. Create a class for the business named Candle that contains data fields for color, height, and price. Create get methods for all three fields. Create set methods for color and height, but not for price. Instead, when height is set, determine the price as $2 per inch. Create a child class named Scented Candle that contains an additional data field named scent and methods to get and set it. In the child class, override the parent’s setHeighto method to set the price of a ScentedCandle object at $3 per inch. Write an application that instantiates an object of each type and displays the details. Save the files as Candle.java, Scented Candle java, and DemoCandles.java.
Expert Answer
public class DemoCandles
{
public static void main(String args[])
{
Candle aCandle = new Candle();
ScentedCandle aScentedCandle = new ScentedCandle();
aCandle.setColor(“pink”);
aCandle.setHeight(6);
aScentedCandle.setColor(“white”);
aScentedCandle.setScent(“gardinia”);
aScentedCandle.setHeight(6);
System.out.println(“The ” + aCandle.getHeight() + ” inch ” + aCandle.getColor() +
” candle costs $” + aCandle.getPrice());
System.out.println(“The ” + aScentedCandle.getHeight() + ” inch ” +
aScentedCandle.getScent() +
” ” + aScentedCandle.getColor() +
” candle costs $” + aScentedCandle.getPrice());
}
}
ScentedCandle.java
public class ScentedCandle extends Candle
{
private String scent;
public String getScent()
{
return scent;
}
public void setScent(String scent)
{
this.scent = scent;
}
@Override
public void setHeight(int h)
{
final double PER_INCH = 3;
super.setHeight(h);
price = h * PER_INCH;
}
}
Candle.java
public class Candle
{
private String color;
private int height;
protected double price;
public String getColor()
{
return color;
}
public int getHeight()
{
return height;
}
public double getPrice()
{
return price;
}
public void setColor(String c)
{
color = c;
}
public void setHeight(int h)
{
final double PER_INCH = 2;
height = h;
price = height * PER_INCH;
}
}
DemoPhoneCalls.java
public class DemoPhoneCalls
{
public static void main(String[] args)
{
IncomingPhoneCall inCall = new IncomingPhoneCall(“212-555-3096”);
OutgoingPhoneCall outCall = new OutgoingPhoneCall(“312-874-0232”, 10);
inCall.getInfo();
outCall.getInfo();
}
}
IncomingPhoneCall.java
public class IncomingPhoneCall extends PhoneCall
{
public final static double RATE = .02;
public IncomingPhoneCall(String num)
{
super(num);
price = RATE;
}
public void getInfo()
{
System.out.println(“Incoming phone call ” +
getPhoneNumber() + ” ” + RATE + ” per call. Total is $” +
+ getPrice());
}
public String getPhoneNumber()
{
return phoneNumber;
}
public double getPrice()
{
return price;
}
}
PhoneCall.java
public abstract class PhoneCall
{
String phoneNumber;
double price;
public PhoneCall(String num)
{
phoneNumber = num;
price = 0.0;
}
public void setPrice(double pr)
{
price = pr;
}
public abstract String getPhoneNumber();
public abstract double getPrice();
public abstract void getInfo();
}
OutgoingPhoneCall.java
public class OutgoingPhoneCall extends PhoneCall
{
public final static double RATE = .04;
private int minutes;
public OutgoingPhoneCall(String num, int mins)
{
super(num);
minutes = mins;
price = minutes * RATE;
}
public void getInfo()
{
System.out.println(“Outgoing phone call ” +
getPhoneNumber() + ” ” + RATE +
” per minute at ” + minutes +
” minutes. Total is $” +
getPrice());
}
public String getPhoneNumber()
{
return phoneNumber;
}
public double getPrice()
{
return price;
}
}
PhoneCallArray.java
public class PhoneCallArray
{
public static void main(String[] args)
{
PhoneCall calls[] = new PhoneCall[10];
int i;
calls[0] = new IncomingPhoneCall(“345-094-8372”);
calls[1] = new OutgoingPhoneCall(“644-564-8572”, 4);
calls[2] = new IncomingPhoneCall(“343-194-3372”);
calls[3] = new OutgoingPhoneCall(“655-999-6372”, 10);
calls[4] = new IncomingPhoneCall(“545-065-2362”);
calls[5] = new OutgoingPhoneCall(“655-999-6372”, 30);
calls[6] = new IncomingPhoneCall(“125-345-4857”);
calls[7] = new OutgoingPhoneCall(“235-955-1371”, 3);
calls[8] = new IncomingPhoneCall(“644-564-8572”);
calls[9] = new OutgoingPhoneCall(“920-787-8919”, 5);
for(i = 0; i < calls.length; ++i)
calls[i].getInfo();
}
}