第二次上机含基本题目的参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 类编程练习
2.1实验目的
通过编程和上机实验理解Java 语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握OOP 方式进行程序设计的方法,了解类的继承性和多态性的作用。
2.2实验要求
1.编写一个体现面向对象思想的程序。
2.编写体现类的继承性的程序。
3.编写体现类的多态性的程序。
2.3实验内容
2.3.1用户自定义类
import java.util.*;
public class EmployeeTest
{
public static void main(String[] args)
{
// fill the staff array with three Employee objects
Employee[] staff = new Employee[3];
staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
// raise everyone's salary by 5%
for (int i=0;i<staff.length;i++)
{
staff[i].raiseSalary(5);
}
// print out information about all Employee objects
for (int i=0;i<staff.length;i++)
{
System.out.println("name=" + staff[i].getName()
+ ",salary=" + staff[i].getSalary()
+ ",hireDay=" + staff[i].getHireDay());
}
}
}
class Employee
{
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day); // GregorianCalendar uses 0 for January
hireDay = calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
private String name;
private double salary;
private Date hireDay;
}
2.3.2类的继承性
class Employee {
String name ;
int salary;
public Employee(String name,int salary){
= name;
this.salary = salary;
}
public String getDetails( ){
return "Name: "+name+"\nSalary: "+salary;
}
}
class Manager extends Employee {
private String department ;
public Manager(String name,int salary,String department){
super(name,salary);
this.department = department;
}
public String getDetails( ){
return "Name: "+name+"\nSalary: "+salary+"\nDepartment: "+ department;
}
}
class Secretary extends Employee{
public Secretary(String name,int salary){
super(name,salary);
}
}
public class TestOverriding{
public static void main(String[] srgs){
Manager m = new Manager("Tom",2000,"Finance");
Secretary s = new Secretary("Mary",1500);
System.out.println(m.getDetails());
System.out.println(s.getDetails());
}
}
2.3.2编程题
1.(基本题)本题目要求实现的各个类,按照其继承的顺序,分别是:
Circle类:用来描述圆的状态和行为;
Ellipse类:描述椭圆的状态和行为,该类继承Circle类;
Cylinder类:描述圆柱体,该类的属性bottom是Circle类对象;
Test类:实例化以上各个类。
各个类的具体说明如下:
(1). 编写描述圆的Circle类
Circle类只有一个属性值radius,记录圆的半径。
该类的方法包括:
构造方法Circle(double radius),设置圆的半径;
get和set方法(设置和获取属性值radius);
calculateArea方法:计算圆的面积并返回结果。
(2). 编写描述椭圆的Ellipse类
Ellipse类继承Circle类,包含两个属性a和b,表示长短轴,实现的方法包括:构造方法Ellipse(double a,double b);
get和set方法(设置和获取属性值a,b);
calculateArea方法:覆盖父类中的calculateArea方法,计算椭圆的面积。
(3.14*(a/2)*(b/2))
(3). 编写描述圆柱体的Cylinder类
Cylinder类,包含两个属性,该属性bottom是Circle类对象;属性h表示圆柱体的高。
实现的方法包括:
构造方法Cylinder(Circle a, double h);
get和set方法;
calculateArea方法:覆盖父类中的calculateArea方法,计算圆柱体的表面积;
(6). 编写Test类
实例化以上各个类,过程如下:
a.初始化一个Cylinder类型的数组,长度为3,并用按对象面积对该数组排序,打印出排序后的结果;
b.初始化一个Circle类型的数组,长度为3,该数组中元素有Circle,也有Ecllipse,并用按对象面积对该数组排序,打印出排序后的结果。
//
class Circle{
private double radias;
public Circle(double a){
this.radias=a;
}
public Circle(){
}
public void setRadias(double a){
radias=a;
}
public double getRadias(){
return radias;
}
public double calculateArea(){
return 3.14*radias*radias;
}
}
class Ellipse extends Circle{
private double a,b;
public Ellipse(double a,double b){
this.a=a;
this.b=b;
}
public void setA(double a){
this.a=a;
}
public double getA(){
return a;
}
public void setB(double b){
this.b=b;
}
public double getB(){
return b;
}
public double calculateArea(){
return 3.14*(a/2)*(b/2);
}
}
class Cylinder {
private double h;
private Circle bottom;
public Cylinder(Circle bottom, double h){ this. bottom = bottom;
this.h=h;
}
public void setCircle(Circle bottom){
this. bottom = bottom;
}
public Circle get Circle (){
return bottom;
}
public void setH(double b){
this.h=h;
}
public double getH(){
return h;
}
public double calculateArea(){
return (2*3.14*a*h);
}
}
class Test{
public static void main(String args[]){
Cylinder[] c=new Cylinder[3];
c[0]=new Cylinder(2.0,3.0);
c[1]=new Cylinder(4.0,3.0);
c[2]=new Cylinder(2.0,5.0);
for(int i=0;i<3;i++)
{
int k=i;
Cylinder temp=null;
for(int j=i+1;j<3;j++)
{
if(c[k].calculateArea()>c[j].calculateArea())
{
temp=c[k];
c[k]=c[j];
c[j]=temp;
}
}
}
for(int i=0;i<3;i++)
{
System.out.println("Cylinder ("+c[i].getA()+","+c[i].getH()+")");
}
Circle[] c1=new Circle[3];
c1[0]=new Circle(2.0);
c1[1]=new Circle(4.0);
c1[2]=new Ellipse(2.0,5.0);
for(int i=0;i<3;i++)
{
int k=i;
Circle temp=null;
for(int j=i+1;j<3;j++)
{
if(c1[k].calculateArea()>c1[j].calculateArea())
{
temp=c1[k];
c1[k]=c1[j];
c1[j]=temp;
}
}
}
for(int i=0;i<3;i++)
{
if(c1[i] instanceof Ellipse)
System.out.println("Ellipse
("+((Ellipse)c1[i]).getCircle().getRadius()+","+((Ellipse)c1[i]).getH()+")");
else
System.out.println("Circle ("+c1[i].getRadias()+")");
}
}
}
2. (扩展题)编写模拟录取程序。
•编写一个学校类School,其中包括静态成员变量scoreLine(录取分数线)和对该变量进行设置和获取的方法。
•编写一个学生类Student,她的成员变量有考生的name(姓名)、id(考号)、intgretResult(综合成绩)、sports(体育成绩)。
它还有获取学生的各个属性的基本get
方法。
•编写一个录取类,它的方法boolean luQu(Student st)用于判断学生是否符合录取条件。
其中录取条件为:综合成绩在学校类确定的录取分数线之上,或体育成绩在96分
以上并且综合成绩大于300分。
•写一个测试类Test,它里面有main方法,该方法内用数组保存创建的10个学生对象,完成以下功能:
(1)用录取类的luQu方法一次判断数组中的10个学生是否被录取。
(2)统计被录取学生的平均综合成绩。
(3)按学号查询学生的相关信息。