第十二周上机练习

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 }
原文地址:https://www.cnblogs.com/baigei/p/12929948.html