实验2 类和对象

实验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;