实验2 类和对象
一、 实验目的:
熟悉类和对象的定义及使用;熟悉static关键字、this关键字,访问权限等。
二、 实验内容:
1. 编写一个Java应用程序,该程序有2个类:Vehicle(机动车)和User(主类)。Vehicle类的成员变量有:speed(速度)、power(功率)。成员方法有:speedUp(int s)—加速,speedDown(int d)—减速,setPower(int p)—设置功率,getPower()—获取功率
请按下面给出的程序模版,填写缺少的代码,完成程序。
Vehicle.java
public class Vehicle{
代码1 //声明double型变量speed
代码2 //声明int型变量power
void speedUp(int s)
{
代码3 //将s的值累加到speed
}
void speedDown(int d)
{
代码4 //从speed中减去d
}
void setPower(int p)
{
代码5 //将p赋给power
}
int getPower()
{
代码6 //返回power的值
}
double getSpeed()
{
return speed;
}
}
User.java
public class User {
public static void main(String args[]){
Vehicle car1,car2;
代码7 //创建对象car1
代码8 //创建对象car2
car1.setPower(128);
car2.setPower(76);
System.out.printf("car1的功率是:%d\n", car1.getPower());
System.out.printf("car2的功率是:%d\n", car2.getPower());
代码9 //car1调用speedUp方法,速度增加80
代码10 //car2调用speedUp方法,速度增加80
System.out.printf("car1目前的速度:%f\n", car1.getSpeed());
System.out.printf("car2目前的速度:%f\n", car2.getSpeed());
car1.speedDown(10);
car2.speedDown(20);
System.out.printf("car1目前的速度:%f\n", car1.getSpeed());
System.out.printf("car2目前的速度:%f\n", car2.getSpeed());
}
}
功能扩展:
在类中定义构造方法,构造具有不同初始值的对象。
改进speedUP()方法,限制speed的值不能超过200。
改进speedDown()方法,限制speed的值不能小于0。
增加一个刹车方法void brake(),调用它能将speed的值变为0。
package t1;
public class Vehicle{
double speed; //声明double型变量speed
int power; //声明int型变量power
Vehicle(double x, int y){
speed = x;
power = y;
}
void speedUp(int s)
{
if(speed + s <= 200){
speed = speed + s; //将s的值累加到speed
}
}
void speedDown(int d)
{
if(speed - d > 0){
speed = speed - d; //从speed中减去d
}
}
void setPower(int p)
{
power = p; //将p赋给power
}
int getPower()
{
return power; //返回power的值
}
double getSpeed()
{
return speed;
}
void brake(){
speed = 0;
}
}
package t1;
public class User {
public static void main(String args[]){
Vehicle car1,car2;
car1 = new Vehicle(0,0); //创建对象car1
car2 = new Vehicle(0,0); //创建对象car2
car1.setPower(128);
car2.setPower(76);
System.out.printf("car1的功率是:%d\n", car1.getPower());
System.out.printf("car2的功率是:%d\n", car2.getPower());
car1.speedUp(80); //car1调用speedUp方法,速度增加80
car2.speedUp(80); //car2调用speedUp方法,速度增加80
System.out.printf("car1目前的速度:%f\n", car1.getSpeed());
System.out.printf("car2目前的速度:%f\n", car2.getSpeed());
car1.speedDown(10);
car2.speedDown(20);
System.out.printf("car1目前的速度:%f\n", car1.getSpeed());
System.out.printf("car2目前的速度:%f\n", car2.getSpeed());
}
}
2.根据下面要求,编写一个Java应用程序:
①定义类StuCard,用到类成员变量(人数)和实例成员变量:学号、姓名、性别、专业、年级、籍贯等;
②初始化的时候用到构造方法,提供两个以上构造方法;
③多个类(业务类StuCard和测试主类),用到包的概念,且分别放到不同的包中;
④用到类成员访问权限,要求类成员变量为Public,实例成员变量为Private;
⑤编写所有数据成员的访问器和修改器(共有的get和set方法);
⑥在主类中实现对业务类StuCard的读、写、修改属性等功能。
在完成以上功能要求的情况下,可以进一步扩展。
package t2;
public class StuCard {
public static int number = 3000; //类成员变量 人数
//学号、姓名、性别、专业、年级、籍贯
private String id;
private String name;
private String sex;
private String major;
private String grade;
private String address;
public StuCard(String newid, String newname, String newsex, String newmajor, String newgrade, String newaddress){
id = newid;
name = newname;
sex = newsex;
major = newmajor;
grade = newgrade;
address = newaddress;
}
StuCard(String a){
grade = a;
}
//get方法
public String getid(){
return id;
}
public String getname(){
return name;
}
public String getsex(){
return sex;
}
public String getmajor(){
return major;
}
public String getgrade(){
return grade;
}
public String getaddress(){
return address;
}
// set方法
public void setid(String a){
id = a;
}
public void setname(String a){
name = a;
}
public void setsex(String a){
sex = a;
}
public void setmajor(String a){
major = a;
}
public void setgrade(String a){
grade = a;
}
public void setaddress(String a){
address = a;
}
}
package t2.ceshizhulei;
import t2.*;
public class ceshizhulei {
public static void main(String args[]){
StuCard stu = new StuCard("2001010101", "张三", "男", "法学", "2020", "山东省青岛市");
//读
stu.getid();
stu.getname();
stu.getsex();
stu.getmajor();
stu.getgrade();
stu.getaddress();
//写
System.out.printf("学号:%s\n",stu.getid());
System.out.printf("姓名:%s\n",stu.getname());
System.out.printf("性别:%s\n",stu.getsex());
System.out.printf("专业:%s\n",stu.getmajor());
System.out.printf("年级:%s\n",stu.getgrade());
System.out.printf("籍贯:%s\n",stu.getaddress());
//修改
stu.setid("2007010101");
stu.setname("李四");
stu.setsex("女");
stu.setmajor("英语");
stu.setgrade("2019");
stu.setaddress("山东省济南市");
}
}
3.用类描述计算机中CPU的速度和硬盘的容量
要求Java应用程序有4个类,名字分别是PC、CPU、HardDisk和Test,其中Test是主类。
PC类与CPU和HardDisk类关联的UML图如下:
其中,CPU类要求getSpeed()返回speed的值,要求setSpeed(int m)方法将参数m的值赋值给speed。HardDisk类要求getAmount()返回amount的值,要求setAmount(int m)方法将参数m的值赋值给amount。PC类要求setCPU(CPU c)将参数c的值赋值给cpu,要求setHardDisk(HardDisk h)方法将参数h的值赋值给HD,要求show()方法能显示cpu的速度和硬盘的容量。
主类Test的要求:
(1) main方法中创建一个CPU对象cpu,cpu将自己的speed设置为2200;
(2) main方法中创建一个HardDisk对象disk,disk将自己的amount设置为200;
(3) main方法中创建一个PC对象pc;
(4) pc调用setCPU(CPU c)方法,调用时实参是cpu;
(5) pc调用setHardDisk(HardDisk h)方法,调用时实参是disk;
(6) pc调用show()方法。
package t3;
public class Test {
public static void main(String args[]){
CPU cpu = new CPU();
cpu.speed = 2200;