//除基本工资外还根据销售额发放浮动工资
final class CommissionWorker extends Employee{ private double salary; private double fsalary;
public CommissionWorker(String first,String last,double s,double f){
super(first,last); setSalary(s); setFsalary(f); }
public void setFsalary(double f){
fsalary=(f>0?f:0); }
public void setSalary(double s){
salary=s; }
public String earnings(){
String salary1 = String.valueOf(salary+fsalary); return salary1; }
public String toString(){
return \ } }
HourlyWorker类
package ss1;
//根据工作时间长短发放工资
final class HourlyWorker extends Employee{
private double wage; private double hours;
public HourlyWorker(String first,String last,double w,double h) {
super(first,last); setWage(w); setHours(h);
}
public void setWage(double w) {
wage=(w>0?w:0); }
public void setHours(double h) {
hours=(h>=0&&h<168?h:0); }
public String earnings() {
String salary1 = String.valueOf(wage*hours); return salary1; }
public String toString() {
return \—— \ }}
PieceWorker类
package ss1;
//按其生产的产品数发放工资
final class PieceWorker extends Employee{
private double wagePiece; private int quantity;
public PieceWorker(String first,String last,double w,int q){
super(first,last); setWage(w); setQuantity(q); }
public void setWage(double w) {
wagePiece=(w>0?w:0); }
public void setQuantity(int q){
quantity=q; }
public String earnings() {
String salary1 = String.valueOf(quantity*wagePiece); return salary1; }
public String toString() {
return \—— \ }
}
Test类
package ss1;
class Test{
public static void main(String args[ ]) { //使用超类声明ref Employee ref; String out=\ //分别定义各子类
Boss b=new Boss(\
CommissionWorker c=new CommissionWorker(\ PieceWorker p=new PieceWorker(\ HourlyWorker h=new HourlyWorker(\ //使用子类分别实例化 ref=b;
out+=ref.toString()+\父类调用earnings方法得\子类调用earnings方法得:\ ref=c;
out+=ref.toString()+\父类调用earnings方法得\子类调用earnings方法得:\ ref=p;
out+=ref.toString()+\父类调用earnings方法得\子类调用earnings方法得:\ ref=h;
out+=ref.toString()+\父类调用earnings方法得\子类调用earnings方法得:\ System.out.print(out); }
:::: }
(6)异常的捕获
package ss;
import java.io.*; class Ex1 {
public static void main(String args[ ]) {
try{
BufferedReader strin=new BufferedReader(
new InputStreamReader(System.in));//建立输入流缓冲区 System.out.print(\请输入除数:\String cl=strin.readLine();//键盘输入 int a=Integer .parseInt(cl);
System .out .print(\请输入被除数:\ cl=strin .readLine();
int b=Integer .parseInt(cl); int c=b/a;
System .out .println(\商为:\ }
//捕获异常
catch(IOException e){ //捕获I/O异常
System.out.println(\有关的异常\ }
//捕获数值转化时的异常,如不能将字符转化成数值 catch(NumberFormatException e){
System.out.println(\数值转化有关的异常\ }
//捕获除数为0的异常 catch(Exception e){
System.out.println(\除数为0的异常\ } } }
(8)编写程序包含自定义异常MyException,当100被13和4除时抛出该异常,其余除数显示商值。
import java.io.*;
class MyException extends Exception{ MyException(String msg) { super(msg); } }
public class DoubleDivideA {
public static void main(String[] args) throws MyException { try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print(\请输入实数除法运算的被除数:\ String str = in.readLine();
double a = Double.parseDouble(str); System.out.print(\请输入除数:\ str = in.readLine();
double b = Double.parseDouble(str);
System.out.println(\商结果:\ }
catch (ArithmeticException e1) {
System.out.println(\商结果:Infinity\
System.out.println(\商结果:NaN\ }
catch (NumberFormatException e2) {
System.out.println(\异常:字符串不能转换成整数!\ }
catch (IOException e3) { System.out.println(\异常:IO异常\ }
finally {
System.out.println(\程序结束。\ } }
static double division(double a, double b) throws MyException {
if (a==100&&(b==4||b==13))
throw new MyException (\不符规范\
else
return (a/b); } }
四、实验结果与分析
(1)调试结果
调试结果:(2.0+3.5i)+(9.0+1.7i)=(11.0+5.2i)
(2.0+3.5i)-(9.0+1.7i)=(-7.0+1.8i)

