📄 payingcalculation.java
字号:
//Example 7 of Chapter 3
import javax.swing.JOptionPane;
// 定义抽象类Merchandise
abstract class Merchandise
{
private String Name;
private String SerialNumber;
public Merchandise( String name, String number )
{
Name = name;
SerialNumber = number;
}
public void setName( String name )
{
Name = name;
}
public String getName()
{
return Name;
}
public void setSerialNumber( String number )
{
SerialNumber = number;
}
public String getSerialNumber()
{
return SerialNumber;
}
public String toString()
{
return getName() + ",SerialNumber: " + getSerialNumber();
}
public abstract double paying();
}// 结束定义Merchandise
// 定义类Wrappage
class Wrappage extends Merchandise
{
private double wrappagePrice;
public Wrappage( String name, String number, double nowwrappageprice )
{
super( name, number );
setWrappagePrice( nowwrappageprice );
}
public void setWrappagePrice( double nowwrappageprice )
{
wrappagePrice = nowwrappageprice < 0.0 ? 0.0 : nowwrappageprice;
}
public double getWrappagePrice()
{
return wrappagePrice;
}
// 重写父类的方法
public String toString()
{
return "包装物:" + super.toString();
}
// 实现父类的抽象方法
public double paying()
{
return getWrappagePrice();
}
} // 结束定义Wrappage
// 定义类GeneralMerchandise
class GeneralMerchandise extends Merchandise
{
private double price;
private double count;
public GeneralMerchandise( String name, String number, double nowprice, double nowcount )
{
super( name, number );
setPrice( nowprice );
setCount( nowcount );
}
public void setPrice( double nowprice )
{
price = nowprice < 0.0 ? 0.0 : nowprice;
}
public double getPrice()
{
return price;
}
public void setCount( double nowcount )
{
count = nowcount < 0.0 ? 0.0 : nowcount;
}
public double getCount()
{
return count;
}
// 重写父类的方法
public String toString()
{
return "一般商品:" + super.toString();
}
// 实现父类的抽象方法
public double paying()
{
return getPrice() * getCount();
}
} // 结束定义GeneralMerchandise
// 定义类RebateMerchandise
class RebateMerchandise extends Merchandise
{
private double price;
private double count;
private int rebateCount;
public RebateMerchandise( String name, String number, double nowprice,
double nowcount, int nowrebatecount )
{
super( name, number );
setPrice( nowprice );
setCount( nowcount );
setRebateCount( nowrebatecount );
}
public void setPrice( double nowprice )
{
price = nowprice < 0.0 ? 0.0 : nowprice;
}
public double getPrice()
{
return price;
}
public void setCount( double nowcount )
{
count = nowcount < 0.0 ? 0.0 : nowcount;
}
public double getCount()
{
return count;
}
public void setRebateCount( int nowrebatecount )
{
rebateCount = nowrebatecount < 0 ? 0 : nowrebatecount;
}
public int getRebateCount()
{
return rebateCount;
}
// 重写父类的方法
public String toString()
{
return "打折商品:" + super.toString();
}
// 实现父类的抽象方法
public double paying()
{
if ( count <= rebateCount )
return price * count;
else
return price * rebateCount + price * ( count - rebateCount ) * 0.9;
}
}// 结束定义RebateMerchandise
// 定义类WrappageMerchandise
class WrappageMerchandise extends GeneralMerchandise
{
private double wrappagePrice;
public WrappageMerchandise( String name, String number, double nowprice,
double nowcount, double nowwrappageprice )
{
super( name, number, nowprice, nowcount );
setWrappagePrice( nowwrappageprice );
}
public void setWrappagePrice( double nowwrappageprice )
{
wrappagePrice = nowwrappageprice < 0.0 ? 0.0 : nowwrappageprice;
}
public double getWrappagePrice()
{
return wrappagePrice;
}
// 重写父类的方法
public String toString()
{
return "带包装的商品:" + super.getName() + " " + ",SerialNumber: " + super.getSerialNumber();
}
// 重写父类的方法
public double paying()
{
return getPrice() * getCount() + getWrappagePrice();
}
}// 结束定义WrappageMerchandise
// 定义主类
public class PayingCalculation
{
public static void main( String[] args )
{
// 生成Merchandise数组
Merchandise merchandise[] = new Merchandise[4];
// 用子类的构造方法实例化
merchandise[ 0 ] = new Wrappage( "包装袋", "100011231", 1.00 );
merchandise[ 1 ] = new GeneralMerchandise( "非常可乐", "205433501", 3.50, 12 );
merchandise[ 2 ] = new WrappageMerchandise( "大米", "502000125", 1.50, 20, 1.00 );
merchandise[ 3 ] = new RebateMerchandise( "苹果", "320171005", 4.80, 5.5, 5 );
String output = "";
// 循环语句中出现运行时多态应用
for ( int i = 0; i < merchandise.length; i++ )
{
output += "\n";
output += merchandise[ i ].toString();
// 确定哪个元素是WrappageMerchandise类对象实例
if ( merchandise[ i ] instanceof WrappageMerchandise )
{
// 强制类型转换后赋值给新的对象实例
WrappageMerchandise currentM = ( WrappageMerchandise ) merchandise[ i ];
output += "\n包装袋的价格是:" + currentM.getWrappagePrice();
} // 结束if语句
output += "\n需要支付:" + merchandise[ i ].paying() + "\n";
} // 结束for语句
JOptionPane.showMessageDialog( null, output );
System.exit( 0 );
}// 结束定义主方法
}// 结束定义主类
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -