实验五 类和对象

实验五  类和对象

实验目的

1. 掌握Java语言种类的定义、对象的创建、对象引用方法。

2. 初步了解面向对象设计方法

实验学时 6学时

实验内容

1.设计一个圆珠笔类BallPen,有1个属性boolean penPoint(笔尖是否伸出),有4个方法:

   (1)构造方法BallPen (),将penPoint置为false

   (2)按压操作方法void  knock(),将penPoint置反

   (3)获取笔尖状态方法 boollean getPenPoint()

   (4)main方法

     创建对象并对实例对象进行按压操作,显示笔尖的状态。

package code51;

public class BallPen {  //将penPoint置为false

boolean penPoint;

BallPen() {

penPoint=false;

}

void knock() {  //将penPoint置反

if(penPoint==false)

{

penPoint=true;

}

else

{

penPoint=false;

}

}

boolean getPenPoint() {  //获取笔尖状态

return penPoint;

}

public static void main(String args[]) {

BallPen a = new BallPen();  //创建对象

a.knock();  //对实例对象进行按压操作

System.out.println("penPoint="+a.getPenPoint());  //显示笔尖的状态

}

}

2.设计一个汽车类Car,有2个属性车主owner和油量oil,有7个方法:

(1)构造方法Car(String owner,double oil)

   (2)构造方法Car(String owner),油量置为0

   (3)加油操作方法void  addOil(double oil)

   (4)行驶操作方法void  drive(int distance)

        假设每100公里的耗油量为定值(自己设置),根据行驶的公里数更新油量。

   (5)获得车主信息方法String  getOwner()

   (6)获得油量方法double getOil()

   (7)main方法

        创建对象并对实例对象进行加油、行驶操作,显示车主、油量。

package code52;

public class Car {

    String owner;

    double oil;

double x;

int distance;

Car(String owner,double oil) {

this.owner=owner;

this.oil=oil;

}

Car(String owner) {  //将油量置为0

oil=0;

}

void addOil(double oil) {  //进行加油操作

oil+=x;

}

void drive(int distance) {  //根据行驶的公里数更新油量

oil-=(distance/100*10);

}

String getOwner() {  //获取车主信息

return owner;

}

double getOil() {  //获取油量

return oil;

}

public static void main(String args[]) {

Car a = new Car("黄博文",100);  //创建对象

a.addOil(100);  //对实例对象进行加油操作

a.drive(200);  //对实例对象进行行驶操作

System.out.println("owner="+a.getOwner());  //显示车主

System.out.println("oil="+a.getOil());  //显示油量

}

}

3.编写一个类表示坐标点,类中包含构造方法在新建类的时候对坐标赋值。另编写一个关于坐标点的工具类。

(1)编写坐标点类Point。

   (2)编写工具类PointUtil,包含方法 double distance(Point a,Point b)用于求两个坐标点之间的距离,和方法double area(Point a,Point b)用于求两点连线为对角线的矩形面积。

   (3)编写主方法求坐标(2,10)到坐标(4,55)之间的距离和矩形面积。

package code53;

public class PointUtil {

int x;

int y;

public PointUtil(int x,int y) {

this.x=x;

this.y=y;

}

double distance(PointUtil x1,PointUtil x2)

{

    double distance=Math.sqrt((x1.x-x2.x)*(x1.x-x2.x)+(x1.y-x2.y)*(x1.y-x2.y));

return distance;  //求两个坐标点之间的距离

}

double area(PointUtil x1,PointUtil x2)

{

double area=(x1.x-x2.x)*(x1.y-x2.y);

if(area<0)

{

area=-area;

}

return area;  //求两点连线为对角线的矩形的面积

}

}

package code53;

import java.util.Scanner;

public class Point {

public static void main(String args[]) {

Scanner in = new Scanner(System.in);

System.out.println("请输入两个点的坐标:");

PointUtil x1 = new PointUtil(in.nextInt(),in.nextInt());  //创建对象并对点x1坐标赋值

PointUtil x2 = new PointUtil(in.nextInt(),in.nextInt());  //创建对象并对点x2坐标赋值

double distance=x1.distance(x1, x2);  //调用方法求两点间距离

double area=x1.area(x1, x2);  //调用方法求矩形面积

System.out.println("两坐标点间的距离为:"+distance);

System.out.println("围成矩形的面积为:"+area);

}

}

4. 编写Java程序模拟简单的计算器。 定义名为Number的类,其中有两个私有的整型数据成员x和y。有7个方法:

(1)构造方法Number(int x,int y)

(2)加法运算方法 int addition(int x,int y)

(3)减法运算方法 int subtration(int x,int y)

(4)乘法运算方法 int multiplication(int x,int y)

(5)除法运算方法 int division(int x,int y)

另外编写一个测试类,对Number类进行测试。

package code54;

public class Number {

 int x,y;

 Number(int x,int y) {

 this.x = x;

 this.y = y;

 }

 int addition(int x,int y) {  //进行加法运算

 return x+y;

 }

 int subtration(int x,int y) {  //进行减法运算

 return x-y;

 }

 int multiplication(int x,int y) {  //进行乘法运算

 return x*y;

 }

 int division(int x,int y) {  //进行除法运算

 return x/y;

 }

}

package code54;

import java.util.Scanner;

public class TextNumber {

public static void main(String args[]) {

 Scanner in = new Scanner(System.in);

 int x = in.nextInt();

 int y = in.nextInt();

 Number a = new Number(x,y);  //创建对象

 System.out.println("x+y="+a.addition(x, y));  //调用加法运算方法

 System.out.println("x-y="+a.subtration(x, y));  //调用减法运算方法

 System.out.println("x*y="+a.multiplication(x, y));  //调用乘法运算方法

 System.out.println("x/y="+a.division(x, y));  //调用除法运算方法

 }

}

5. 定义长方形类Rectangle,含:

(1)属性

int width;

int height;

    (2)方法

        Rectangle():宽、高默认值为1;

   Rectangle(int val):宽、高均为参数值;

Rectangle(int width,int height):

Double getSquare():计算面积;

Double getPerimeter():计算周长;

另外编写测试类进行测试。

package code55;

public class Rectangle {

int width;

int height;

Rectangle()  //宽、高默认值为1

{

width=1;

height=1;

}

Rectangle(int val)  //宽、高均为参数值

{

width=val;

height=val;

}

Rectangle(int width,int height) {

this.width=width;

this.height=height;

}

Double getSquare()  //计算面积

{

double square;

square=width*height;

return square;

}

Double getPerimeter()  //计算周长

{

double c;

c=width*2+height*2;

return c;

}

}

package code55;

import java.util.Scanner;

public class TextRectangle {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

System.out.println("请输入长方形的宽和高:");

int width=in.nextInt();

int height=in.nextInt();

Rectangle a=new Rectangle(width, height);  //创建对象

System.out.println("面积为"+a.getSquare()+","+"周长为"+a.getPerimeter());  //调用方法求面积和周长

}

}

6. 定义一个时间类MyTime,有三个属性hour,minute,second。为MyTime类定义构造方法,以便创建对象时初始化成员变量。除了构造方法外,还要创建以下方法:

(1)nextSecond( ):时间经过1秒

(2)nextMinute( ):时间经过1分

(3)nextHour( ):时间经过1小时

(4)prevSecond( ):前1秒

(5)prevMinute( ):前1分

(6)prevHour( ):前一小时

(7)display( ):以HH:MM:SS格式显示时间

另外编写测试类,进行测试。

package code56;

public class MyTime {

int hour;

int minute;

int second;

public MyTime(int hour, int minute, int second) {

this.hour=hour;

this.minute=minute;

this.second=second;

}

void nextSecond()  //时间经过一秒

{

if(second!=59) second+=1;

else

{

second=0;

if(minute!=59) minute+=1;

else

{

minute=0;

if(hour!=23) hour+=1;

else

{

hour=0;

}

}

}

}

void nextMinute()  //时间经过一分

{

if(minute!=59) minute+=1;

else

{

minute=0;

if(hour!=23) hour+=1;

else

{

hour=0;

}

}

}

void nextHour()  //时间经过一小时

{

if(hour!=23) hour+=1;

else

{

hour=0;

}

}

void prevSecond() {  //前一秒

if(second!=0) second-=1;

else

{

second=59;

if(minute!=0) minute-=1;

else

{

minute=59;

if(hour!=0) hour-=1;

else

{

hour=23;

}

}

}

}

void prevMinute() {  //前一分

if(minute!=0) minute-=1;

else

{

minute=59;

if(hour!=0) hour-=1;

else

{

hour=23;

}

}

}

void prevHour()  //前一小时

{

if(hour!=0) hour-=1;

else

{

hour=23;

}

}

void display()  //按HH:MM:SS的格式显示时间

{

System.out.println(hour+":"+minute+":"+second);

}

}

package code56;

import java.util.Scanner;

public class TextMyTime {

public static void main(String[] args) {

int hour=0,minute=0,second=0;

MyTime a=new MyTime(hour,minute,second);  //创建对象并赋值

Scanner in = new Scanner(System.in);

a.hour=in.nextInt();

a.minute=in.nextInt();

a.second=in.nextInt();

a.prevHour();  

a.nextMinute();

a.nextSecond();  //调用方法进行测试

a.display();  //按规定格式显示时间

}

}

7. 编写程序使用复数类Complex验证两个复数 2+2i 和3+3i 相加产生一个新的复数5+5i 。复数类Complex满足如下要求:

(1)属性

int realPart :复数的实部;

int imaginPart:复数的虚部;

(2)方法

Complex( ) : 构造方法,将复数的实部和虚部都置0;

Complex( int r , int i ) : 

Complex complexAdd(Complex a) : 将当前复数对象与形参复数对象相加,所得的结 果仍是一个复数值,返回给此方法的调用者。

String toString( ) : 把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中 a 和 b分别为实部和虚部的数据。

另外编写一个测试类Test,对Complex类进行测试。

package code57;

public class Complex {

int realPart;

int imaginPart;

Complex() {

realPart=0;

imaginPart=0;  //将复数的实部和虚部都置为0

}

Complex(int r,int i) {

realPart=r;

imaginPart=i;

}

Complex complexAdd(Complex a)

{

realPart+=a.realPart;

imaginPart+=a.realPart;  //将当前复数对象与形参复数对象相加

return a;

}

public String toString()  //把当前复数对象的实部和虚部组合成a+bi的字符串形式

{

return realPart+"+"+imaginPart+"i";

}

}

package code57;

public class TestComplex {

public static void main(String args[]) {

Complex a=new Complex(1,1);  

Complex b=new Complex(2,2);  //创建对象并赋值

a.complexAdd(b);  //调用方法将a、b的两部相加

System.out.println(a.toString());  //输出其组合形式

}

}

实验小结

  1. 类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
  2. 对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象;
  3. 在Java中定义类,使用关键字class完成;
  4. 对象.属性:表示调用类之中的属性;
  5. 对象.方法():表示调用类之中的方法;
  6. 如果一个类中已经明确定义了一个构造方法,则无参构造方法将不会自动生成;
  7. this关键字可以用来调用本类属性、方法、对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文文喜欢郭子吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值