第十二周上机作业

1、设计个类,分别是:(知识点:抽象类及抽象方法)

1Shape表示图形类,有面积属性area、周长属性per,颜色属性color,有两个构造方法(一个是默认的、一个是为颜色赋值的),还有3个抽象方法,分别是:getArea计算面积、getPer计算周长、showAll输出所有信息,还有一个求颜色的方法getColor

22个子类:

1Rectangle表示矩形类,增加两个属性,Width表示长度、height表示宽度,重写getPergetAreashowAll三个方法,另外又增加一个构造方法(一个是默认的、一个是为高度、宽度、颜色赋值的)。

2Circle表示圆类,增加1个属性,radius表示半径,重写getPergetAreashowAll三个方法,另外又增加两个构造方法(为半径、颜色赋值的)。

 3)一个测试类PolyDemo,在main方法中,声明创建每个子类的对象,并调用2个子类的showAll方法。

package trip;
 
public abstract class Shape {
       double area;
       double per;
       private String color;
        
       public abstract double getArea();
       public abstract double getPer();
       public abstract void showAll();
       public void getColor(String color){
           this.color=color;
       }
       public void setArea(double area){
           this.area=area;
       }
       public void setPer(double per){
           this.per=per;
       }
       public void setColor(){
          System.out.println("图形的颜色是"+color);
       
       }
      
        
}

  

package trip;
 
public class Rectangle extends Shape {
      int width;
      int length;
      int xx;
      int yy;
       
       
      public Rectangle(){
           
      }
        public Rectangle(int kd,int gd){
            width=kd;
            length=gd;
        }
        @Override
        public double getArea() {
            // TODO Auto-generated method stub
            this.area=length*width;
            return this.area;
        }
        @Override
        public double getPer() {
            // TODO Auto-generated method stub
            this.per=2*(width+length);
            return this.per;
        }
        @Override
        public void showAll() {
            // TODO Auto-generated method stub
            System.out.println("矩形的长为"+length+"宽为"+width+"周长为"+this.getPer()+"面积为"+this.getArea());
        }
         
                 
}

  

package trip;
 
public class Circle extends Shape {
    int radius;
     
    public Circle(){
         
         
    }
     public Circle(int r){
         radius=r;
     }
    @Override
    public double getArea() {
        // TODO Auto-generated method stub
        this.area=3.14*(radius*radius);
        return this.area;
    }
    @Override
    public double getPer() {
        // TODO Auto-generated method stub
        this.per=2*3.14*radius;
        return this.per;
    }
    @Override
    public void showAll() {
        // TODO Auto-generated method stub
        System.out.println("圆的半径为"+radius+"圆的周长为"+this.getPer()+"圆的面积为"+this.getArea());
    }
      
      
}
      

  

package trip;
 
public class PolyDemo {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Rectangle r=new Rectangle(2,7);
        r.showAll();
        r.getColor("red");
        r.setColor();
        Circle c=new Circle(6);
        c.showAll();
        c.getColor("blue");
        c.setColor();
 
    }
 
}

  

2Cola公司的雇员分为以下若干类:(知识点:多态)

(1) ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份。

Ÿ 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。

(2) SalariedEmployee ColaEmployee 的子类,拿固定工资的员工。

Ÿ 属性:月薪

(3) HourlyEmployee ColaEmployee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。

Ÿ 属性:每小时的工资、每月工作的小时数

(4) SalesEmployee ColaEmployee 的子类,销售人员,工资由月销售额和提成率决定。

Ÿ 属性:月销售额、提成率

(5) 定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员工的工资数额,写一个测试类TestCompany,main方法,把若干各种类型的员工放在一个ColaEmployee 数组里,并单元出数组中每个员工当月的工资。

package trip;
 
public class ColaEmployee {
    String name;
    int month;
    public ColaEmployee(){
         
    }
    public ColaEmployee(String name,int month){
        this.name = name;
        this.month = month;
    }
    public double getSalary(int month){
        return 0;
    }
}

  

package trip;
 
public class SalariedEmployee extends ColaEmployee {
     double monthSalary;
        public SalariedEmployee(String name,int month,double monthSalary){
            super(name,month);
            this.monthSalary = monthSalary;
        }
        public double getSalary(int month){
            if(super.month==month){
                return monthSalary+100;
            }else{
                return monthSalary;
            }
        }
          
 
}
  

  

package trip;
 
public class HourlyEmployee extends ColaEmployee{
    private int shixin;
    private int xiaoshishu;
    public HourlyEmployee(String name,int month,int shixin,int xiaoshishu){
        super(name,month);
        this.shixin = shixin;
        this.xiaoshishu= xiaoshishu;
    }
    public double getSalary(int month){
    if(super.month==month){
        if(xiaoshishu>160){
            return shixin*160+shixin*(xiaoshishu-160)*1.5+100;
        }else{
            return shixin*xiaoshishu+100;
        }
    }else{
        if(xiaoshishu>160){
            return shixin*160+shixin*(xiaoshishu-160)*1.5;
        }else{
            return shixin*xiaoshishu;
        }
    }
    }
 
}

  

package trip;
 
public class SalesEmployee extends ColaEmployee {
    private int yuexin;
    private double tcl;
    public SalesEmployee(String name,int month,int yuexin,double tcl){
        super(name,month);
        this.yuexin = yuexin;
        this.tcl = tcl;
    }
    public double getSalary(int month){
        if(super.month==month){
            return yuexin*tcl+100;
        }else{
            return yuexin*tcl;
        }
    }
}

  

package trip;
 
public class Company {
     public void getSalary(ColaEmployee a,int month){
            System.out.println(a.name+"在"+month+"月的月薪为"+a.getSalary(month)+"元");
        }
}

  

package trip;
 
public class TestCompany {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ColaEmployee[] a={
                new SalariedEmployee("SalariedEmployee",7,6666),
                new HourlyEmployee("hourlyEmplotee",7,167,250),
                new SalesEmployee("salesEmployee",7,6000,0.6)
        };
        for(int i=0;i<a.length;i++){
            new Company().getSalary(a[i],7);
        }
    }
 
    }

  

3利用接口实现动态的创建对象:(知识点:接口

1)创建4个类

1苹果

2香蕉

3葡萄

4园丁

2)在三种水果的构造方法中打印一句话.

以苹果类为例

class apple

{

public apple()

{

System.out.println(“创建了一个苹果类的对象”);

}

}

3)类图如下:

4)要求从控制台输入一个字符串,根据字符串的值来判断创建三种水果中哪个类的对象。

运行结果如图:

package trip;
 
public interface fruit {
     
     
     
     
}

  

package trip;

public class apple implements fruit{
	 public apple() {
	        super();    
	        System.out.println("创建了苹果对象");
	    }
}

  

package trip;

public class pear implements fruit{
	     public pear() {
	        System.out.println("创建了梨对象");
	    }
	 
	     
	}

  

package trip;

public class orange implements fruit{
	 
    
    public orange() {
        System.out.println("创建了橘子对象");
    }
     
 
     
 
}

  

package trip;
import java.util.*;


public class gardener {
     
    public void hcy() {
        System.out.println("请输入你想创建的果园(苹果,梨,橘子):");
       String s = "";
       Scanner input = new Scanner(System.in);
       s = input.nextLine();
       if (s.equals("苹果")) {
           new apple();
       } else if (s.equals("橘子")) {
           new orange();
       } else if (s.equals("梨")) {
           new pear();
       } else {
           System.out.println("请输入正确的对象");
       }
   }
public static void main(String[] args) {
        new gardener().hcy();
     
    }
 
 
 
}

  

原文地址:https://www.cnblogs.com/shenyangkeji/p/12929290.html