⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 payingcalculation.java

📁 java程序设计语言源代码
💻 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 + -