当前位置:网站首页>实验五 类和对象
实验五 类和对象
2022-07-06 09:22:00 【文文喜欢郭子吖】
实验五 类和对象
实验目的
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()); //输出其组合形式
}
}
实验小结
- 类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
- 对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象;
- 在Java中定义类,使用关键字class完成;
- 对象.属性:表示调用类之中的属性;
- 对象.方法():表示调用类之中的方法;
- 如果一个类中已经明确定义了一个构造方法,则无参构造方法将不会自动生成;
- this关键字可以用来调用本类属性、方法、对象。
边栏推荐
- [面试时]——我如何讲清楚TCP实现可靠传输的机制
- Safe driving skills on ice and snow roads
- [modern Chinese history] Chapter 9 test
- Redis实现分布式锁原理详解
- Custom RPC project - frequently asked questions and explanations (Registration Center)
- 4. Branch statements and loop statements
- 一段用蜂鸣器编的音乐(成都)
- Relationship between hashcode() and equals()
- Mortal immortal cultivation pointer-2
- Read only error handling
猜你喜欢

Caching mechanism of leveldb

hashCode()与equals()之间的关系

Programme de jeu de cartes - confrontation homme - machine

Using spacedesk to realize any device in the LAN as a computer expansion screen

fianl、finally、finalize三者的区别

C language Getting Started Guide

Difference and understanding between detected and non detected anomalies

ABA问题遇到过吗,详细说以下,如何避免ABA问题

8. C language - bit operator and displacement operator

Redis的两种持久化机制RDB和AOF的原理和优缺点
随机推荐
Leetcode. 3. Longest substring without repeated characters - more than 100% solution
Detailed explanation of redis' distributed lock principle
仿牛客技术博客项目常见问题及解答(二)
A piece of music composed by buzzer (Chengdu)
It's never too late to start. The tramp transformation programmer has an annual salary of more than 700000 yuan
fianl、finally、finalize三者的区别
1. First knowledge of C language (1)
更改VS主题及设置背景图片
String ABC = new string ("ABC"), how many objects are created
7-6 矩阵的局部极小值(PTA程序设计)
canvas基础1 - 画直线(通俗易懂)
Using qcommonstyle to draw custom form parts
[面試時]——我如何講清楚TCP實現可靠傳輸的機制
稻 城 亚 丁
Pit avoidance Guide: Thirteen characteristics of garbage NFT project
Have you encountered ABA problems? Let's talk about the following in detail, how to avoid ABA problems
6.函数的递归
Change vs theme and set background picture
受检异常和非受检异常的区别和理解
[during the interview] - how can I explain the mechanism of TCP to achieve reliable transmission