1、设计四个类,分别是:(知识点:抽象类及抽象方法)
(1)Shape表示图形类,有面积属性area、周长属性per,颜色属性color,有两个构造方法(一个是默认的、一个是为颜色赋值的),还有3个抽象方法,分别是:getArea计算面积、getPer计算周长、showAll输出所有信息,还有一个求颜色的方法getColor。
(2)2个子类:
1)Rectangle表示矩形类,增加两个属性,Width表示长度、height表示宽度,重写getPer、getArea和showAll三个方法,另外又增加一个构造方法(一个是默认的、一个是为高度、宽度、颜色赋值的)。
2)Circle表示圆类,增加1个属性,radius表示半径,重写getPer、getArea和showAll三个方法,另外又增加两个构造方法(为半径、颜色赋值的)。
(3)一个测试类PolyDemo,在main方法中,声明创建每个子类的对象,并调用2个子类的showAll方法。
1 public class PolyDemo { 2 public static void main(String[] args) { 3 Rectangle r=new Rectangle("蓝",6,6); 4 Circle c=new Circle("蓝",7); 5 r.getAll(); 6 c.getAll(); 7 } 8 } 9 //(形状类) 10 public abstract class Shape { 11 double area; 12 double per; 13 String color; 14 15 public Shape() { 16 } 17 18 public Shape(String color) { 19 this.color = color; 20 } 21 22 public Shape(int area, int per, String color) { 23 this.area = area; 24 this.per = per; 25 this.color = color; 26 } 27 public abstract double getArea(); 28 public abstract double getPer(); 29 public abstract void getAll(); 30 31 public String getColor() { 32 return color; 33 } 34 } 35 //(矩形类) 36 public class Rectangle extends Shape{ 37 int width; 38 int height; 39 40 public Rectangle(String color, int width, int height) { 41 super(color); 42 this.width = width; 43 this.height = height; 44 } 45 46 @Override 47 public double getArea() { 48 area=width*height; 49 return area; 50 } 51 52 @Override 53 public double getPer() { 54 per=(width+height)*2; 55 return per; 56 } 57 58 @Override 59 public void getAll() { 60 System.out.println("宽为"+width+"高为"+height+"面积为"+getArea()+"周长为"+getPer()); 61 62 } 63 } 64 65 //子类(圆形类) 66 public class Circle extends Shape { 67 int radius; 68 69 public Circle(String color, int radius) { 70 super(color); 71 this.radius = radius; 72 } 73 74 @Override 75 public double getArea() { 76 area=3.14*(radius*radius); 77 return area; 78 } 79 80 @Override 81 public double getPer() { 82 per=2*3.14*radius; 83 return per; 84 } 85 86 @Override 87 public void getAll() { 88 System.out.println("半径为"+radius+"面积为"+getArea()+"周长为"+getPer()); 89 } 90 }
2、Cola公司的雇员分为以下若干类:(知识点:多态)
(1) ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份。
方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。
(2) SalariedEmployee : ColaEmployee 的子类,拿固定工资的员工。
属性:月薪
(3) HourlyEmployee :ColaEmployee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。
属性:每小时的工资、每月工作的小时数
(4) SalesEmployee :ColaEmployee 的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率
(5) 定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员工的工资数额,写一个测试类TestCompany,在main方法,把若干各种类型的员工放在一个ColaEmployee 数组里,并单元出数组中每个员工当月的工资。
1 public class ColaEmployee { 2 String name; 3 int month; 4 5 public ColaEmployee() { 6 super(); 7 8 } 9 10 public ColaEmployee(String name, int month) { 11 super(); 12 this.name = name; 13 this.month = month; 14 } 15 16 17 public double getSalary(int month){ 18 return month; 19 } 20 }
1 public class SalariedEmployee extends ColaEmployee{ 2 double monthsalary ; 3 4 public SalariedEmployee() { 5 super(); 6 7 } 8 9 public SalariedEmployee(String name, int mouth ,double monthsalary) { 10 super(name, mouth); 11 this.monthsalary = monthsalary; 12 13 } 14 @Override 15 public double getSalary(int month) { 16 17 if (super.month == month) { 18 return monthsalary + 100; 19 } else { 20 return monthsalary; 21 } 22 23 } 24 }
1 public class HourlyEmployee extends ColaEmployee{ 2 int hourSalary; 3 int hour; 4 5 public HourlyEmployee() { 6 super(); 7 } 8 9 public HourlyEmployee(String name, int month, int hourSalary, int hour) { 10 super(name, month); 11 this.hourSalary = hourSalary; 12 this.hour = hour; 13 } 14 @Override 15 16 public double getSalary(int month) { 17 if(super.month == month){ 18 if (hour > 160) { 19 return hourSalary * 160+ (hour-160)*1.5*hourSalary + 100; 20 }else { 21 return hourSalary * hour + 100; 22 } 23 }else{ 24 if (hour > 160) { 25 return hourSalary * 160 +(hour - 160)*1.5*hourSalary ; 26 }else { 27 return hourSalary * hour; 28 } 29 30 } 31 } 32 }
1 public class SalesEmployee extends ColaEmployee{ 2 double monthsalary; 3 double monthcommission ; 4 public SalesEmployee(String string, int i, int j, double d) { 5 super(); 6 7 } 8 public SalesEmployee(String name,int month,double monthsalary, double monthcommission) { 9 super(name,month); 10 this.monthsalary = monthsalary; 11 this.monthcommission = monthcommission; 12 } 13 @Override 14 public double getSalary(int month) { 15 if (super.month == month) { 16 return monthsalary*monthcommission + 100; 17 } else { 18 return monthsalary*monthcommission; 19 } 20 21 } 22 }
1 public class Company { 2 public void getSalary(ColaEmployee c, int month) { 3 System.out.println(c.name + "在" + month + "月的月薪是:" + c.getSalary(month) + "元"); 4 } 5 }
1 public class TestCompany { 2 public static void main(String[] args) { 3 4 ColaEmployee[] cel = { 5 new SalariedEmployee("拿固定工资的员工", 1, 8500), 6 new HourlyEmployee("按小时拿工资的员工", 2, 100,85), 7 new SalesEmployee("销售人员", 3, 70000, 0.1) 8 }; 9 for (int i = 0; i < cel.length; i++) { 10 new Company().getSalary(cel[i],3); 11 } 12 13 14 } 15 }
3、利用接口实现动态的创建对象:(知识点:接口 )
(1)创建4个类
1苹果
2香蕉
3葡萄
4园丁
(2)在三种水果的构造方法中打印一句话.
以苹果类为例
class apple
{
public apple()
{
System.out.println(“创建了一个苹果类的对象”);
}
}
(3)类图如下:
(4)要求从控制台输入一个字符串,根据字符串的值来判断创建三种水果中哪个类的对象。
运行结果如图:
1 package R; 2 public interface Yuanding { 3 void apple(); 4 void banana(); 5 void putao(); 6 }
1 package R; 2 public class Apple implements Yuanding { 3 public void apple() { 4 System.out.println("创建了一个苹果类的对象"); 5 } 6 public void banana() { 7 8 } 9 public void putao() { 10 11 } 12 }
1 package R; 2 public class Banana implements Yuanding{ 3 public void banana() { 4 System.out.println("创建了一个香蕉类的对象"); 5 } 6 public void apple() { 7 8 } 9 public void putao() { 10 11 } 12 }
1 package R; 2 public class Putao implements Yuanding{ 3 public void putao() { 4 System.out.println("创建了一个葡萄类的对象"); 5 } 6 public void banana() { 7 8 } 9 public void apple() { 10 11 } 12 }
1 package R; 2 import java.util.*; 3 public class Test { 4 public static void main(String[] args) { 5 Scanner input=new Scanner(System.in); 6 System.out.println("请输入您要创建的类:"); 7 String a=input.nextLine(); 8 if(a.equals("apple")) { 9 Yuanding yuanding=new Apple(); 10 yuanding.apple(); 11 } 12 else if(a.equals("banana")) { 13 Yuanding yuanding=new Banana(); 14 yuanding.banana(); 15 } 16 else if(a.equals("putao")) { 17 Yuanding yuanding=new Putao(); 18 yuanding.putao(); 19 } 20 else System.out.println("输入有误!"); 21 } 22 }