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); } } }