java面向对象基础编程题

第一题:

设计一个形状类Shape,方法:求周长和求面积。形状类的子类:Rect(矩形),Circle(圆形)。
Rect类的子类:Square(正方形)。不同的子类会有不同的计算周长和面积的方法
1.总的父类

package com.num4_2;
/*设计一个形状类Shape,方法:求周长和求面积。形状类的子类:Rect(矩形),Circle(圆形)。
Rect类的子类:Square(正方形)。不同的子类会有不同的计算周长和面积的方法
 */
public class Shape {//形状类
    public int chang;//定义长
    public int kuan;//定义宽

    /*public Shape() {
        System.out.println("我是最大的父类");
    }*/

    public int zhouChang(int chang, int kuan){//求周长的方法
return 0;
    }
    public int mianJi(int chang,int kuan){//求面积的方法
return 0;
    }
}

2.各个子类

package com.num4_2;

public class Circle extends Shape {//
    private double r;//半径
    private static double PI=3.14;
    public Circle(){
        System.out.println("这是一个无参构造方法");
    }
    public Circle(double r){
        this.r=r;
    }
    public  void  zhouChang(){
        //return PI*r*2;
        System.out.println("圆的周长为:"+PI*r*2);
    }
    public void mianJi(){
       System.out.println("圆的周长为:"+PI*r*r);
    }
}
package com.num4_2;

public class Rect  extends Shape{ //矩形
private int chang;
private int kuan;
public Rect(){
  //  System.out.println("这是一个无参的构造方法");
}

    public Rect(int chang, int kuan){
    this.chang=chang;
    this.kuan=kuan;
}


    public void zhouchang(){
    System.out.println("矩形的周长为:"+(chang+kuan)*2);
}
public void mianji(){
    System.out.println("矩形的面积为:"+chang*kuan);
}
}
package com.num4_2;

public class Square extends Rect {  //正方形
    private int chang;
    public Square(){
        System.out.println("这是一个无参构造函数");
    }
    public Square(int chang){
        this.chang=chang;
    }
    public void zhouChang(){
        System.out.println("正方形的周长为:"+chang*4);
    }
    public void mianJi(){
        System.out.println("正方形的面积为:"+chang*chang);
    }
}

3.测试类

package com.num4_2;

public class Test {
    public static void main(String[] args) {
/*Shape shape=new Shape();
shape.chang=2;
shape.kuan=4;//无效
        shape.mianJi(2,3);
        shape.zhouChang(2,4);*/

Circle circle=new Circle(3);
circle.mianJi();
circle.zhouChang();
Square square=new Square(5);
square.mianJi();
square.zhouChang();
        Rect rect=new Rect(2,3);
        rect.mianji();
        rect.zhouchang();
Shape shape = new Shape();
    }
}

第二题:

设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,还有开灯(on)这个方法。
设计一个灯泡类(Buble),灯泡类有发亮的方法,其中有红灯泡类(RedBuble)和绿灯泡类(GreenBuble)
他们都继承灯泡类(Buble)一个发亮的方法。

1.个各类

 

package com.num4_3;
/*设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,还有开灯(on)这个方法。
 设计一个灯泡类(Buble),灯泡类有发亮的方法,其中有红灯泡类(RedBuble)和绿灯泡类(GreenBuble)
 他们都继承灯泡类(Buble)一个发亮的方法、*/
public class Lamp {// 台灯类
public Buble b;//初始化一个对象
    public Lamp(Buble b){//有参的构造方法
        this.b=b;
    }
    public void on(){
        b.faLiang();//调用子类重写后的方法
    }
}

 

package com.num4_3;

public class Buble  {//灯泡类
public void faLiang(){
    System.out.println("灯泡可以发亮");

}
}
package com.num4_3;

public class GreenBuble extends Buble {
    @Override
public void faLiang(){
    System.out.println("发绿光");
}
}
package com.num4_3;

public class RedBuble extends Buble {
    @Override
public void faLiang(){

    System.out.println("发红光");
}
}

2.测试类

package com.num4_3;

public class Test1 {
    public static void main(String[] args) {
     
      RedBuble redBuble=new RedBuble();
      redBuble.faLiang();
    }
}

第三题:

Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。
方法:double getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,
则公司会额外奖励100元。
SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪
HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数
SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率
BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
属性:底薪。
写一个程序,把若干各种类型的员工放在一个Employee数组里,
写一个方法,打印出某月每个员工的工资数额。
注意:要求把每个类都做成完全封装,不允许非私有化属性。

1.父类

package com.num4_5;
public class Employee {//员工类的父类
    private String name;//员工的姓名
    private int birthday;//生日
    public String getName(){
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public int getBirthday(){
        return birthday;
    }
    public void setBirthday(int birthday) {
        this.birthday = birthday;
    }

    public void getSalary(int month){//方法:double getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,

    }

}

2.各个子类

package com.num4_5;

public class BasePlusSalesEmployee extends SalesEmployee {//销售人员,工资由月销售额和提成率决定。
    private double xd;//具有薪底
    public double getXd(){
        return xd;
    }
    public void setXd(double xd){
        this.xd=xd;
    }
    @Override
    public void getSalary(int month){
        double gz=(month==getBirthday())?(getXd()*getTcl()+xd+1000):(getXd()*getTcl()+xd);
        System.out.println(getName()+month+"月份的工资为:"+gz+"元");
    }
}
package com.num4_5;

public class HourlyEmployee extends Employee {//Employee的子类,按小时拿工资的员工
    private double xsgz;//每小时的工资
    private  double hours;//每月工作的小时数
    public double getXsgz(double xsgz) {
        return xsgz;
    }
    public void setXsgz(double xsgz){
        this.xsgz=xsgz;
    }
    public double getHours(double hours){
        return hours;
    }
    public void setHours(double hours){//按小时拿工资的员工
        this.hours=hours;
    }
    @Override
    public void getSalary(int month){
double gz=(hours<=160)?(hours*xsgz):((hours-160)*xsgz*1.5)+(160*xsgz);//定义了一个工资的属性
        if(month==getBirthday()){
            System.out.println(getName()+month+"本月的工资为;"+(gz+1000)+"元");
        }
        else{
            System.out.println(getName()+month+"本月的工资为;"+gz+"元");
        }
    }
}
package com.num4_5;

public class SalariedEmployee extends Employee{//拿固定工资的员工
    public double yx;//属性:月薪
    public double getYx(){
        return yx;
    }
    public void setYx(double yx) {
        this.yx = yx;
    }
    @Override
    public void getSalary(int month){//方法:double getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,
/*if(month==birthday){
            System.out.println(name+month+"本月的工资为;"+(yx+1000)+"元");
        }
        else{
            System.out.println(name+month+"本月的工资为;"+(yx)+"元");
        }*/
double gz=(month==getBirthday())?(yx+1000):yx;
System.out.println(getName()+month+"月份的工资为:"+gz+"元");
    }
}
package com.num4_5;

public class SalesEmployee extends Employee {//销售人员
    private double yxse;//月销售额
    private double tcl;//提成率
    public double getYxse(){
        return yxse;
    }
    public void setYxse(double yxse){
        this.yxse=yxse;
    }
    public double getTcl(){
        return tcl;
    }
    public void setTcl(double tcl){
        this.tcl=tcl;
    }
    @Override
    public void getSalary(int month){
        double gz=(month==getBirthday())?(yxse*tcl+1000):(yxse*tcl);
        System.out.println(getName()+month+"月份的工资为:"+gz+"元");
    }
}

3.测试类

package com.num4_5;

public class Test4_5 {
    public static void main(String[] args) {
        SalariedEmployee e1 = new SalariedEmployee();
        e1.setName("张三");
        e1.setBirthday(1);
        e1.setYx(3000);

        HourlyEmployee e2 = new HourlyEmployee();
        e2.setName("李四");
        e2.setBirthday(2);
        e2.setXsgz(10);
        e2.setHours(160);

        SalesEmployee e3 = new SalesEmployee();
        e3.setName("王五");
        e3.setBirthday(3);
        e3.setYxse(10000);
        e3.setTcl(0.1);

        BasePlusSalesEmployee e4 = new BasePlusSalesEmployee();
        e4.setName("王五");
        e4.setBirthday(3);
        e4.setYxse(10000);
        e4.setTcl(0.1);
        e4.setXd(2000);

        Employee[] e = {e1,e2,e3,e4};//数组

        for (Employee em : e) {
            System.out.println(em.getName());
        }
       /* for(Employee AM;AM<e.length;){
            System.out.println(AM.getName());
        }
*/

        for (int i = 1; i < 13; i++) {
            System.out.println("------------第"+i+"月工资表------------");
            e1.getSalary(i);
            e2.getSalary(i);
            e3.getSalary(i);
            e4.getSalary(i);
        }

    }
}

 

posted @ 2019-06-03 16:13  故俗  阅读(4383)  评论(0编辑  收藏  举报