Java实验-Object 类

实验目的:
(1) 掌握编写不同包的子类时设置成员访问权限;
(2) 掌握 Object 类与其他类的关系以及 toString() equals(Object o) 方法的作用;
(3) 掌握方法覆盖时必须保证方法原型的一致性;
(4) 掌握类型上转型(上溯)和下转型(下溯)的应用;
实验提示:
(1) equals 方法的参数类型必须是 Object ,访问修饰符必须是 public ,返回类型必须是
boolean ,否则该方法不是对从父类继承的 public boolean equals(Object obj) 方法的
覆盖,至多算是该方法的重载。
(2) Circle 类的 equals 方法不能写成如下代码:
public boolean equals(Object obj) {
if(obj instanceof Circle){
Circle c=(Circle)obj;
return c.getRadius()==getRadius() &&
c.getCenter().equals(getCenter() );
}
return false;
}
以上代码试图通过 c.getCenter().equals(getCenter()) 语句调用实验 4.Point 类的 equals
方法,从而判断圆心是否为同一点。这种写法的错误之处在于实验 4.Circle center 变量
是实验 2.Point 类的对象,而实验 2.Point 类的 equals 方法并没有判断 XY 坐标值是否相
同。
测试案例:
4.1 测试案例(仅用于编码测试)
编号
测试目的
输入或测试数据
期望结果
1
成员的
private
public 修饰
构造方法中直接访问 Point 类的
x y Circle 类的 center radius
提示语法错误
2
子类的构造
方法
创建实验 4.Point() 对象 p1 和实验
4.Point(0,10) 对象 p2
p1.getX() 结果为 0 p1.getY() 结果为 0
p1.distance(p2) 结果为 10
3
子类的构造
方法
创建实验 4.Circle() 对象 c1 和实验
4.Circle(0,0,10) 对象 c2
c1.getCenter().getX() 结果为 0
c1.getCenter().getY() 结果为 0 c1.area()
0 c1.perimeter() 结果为 0 ,调用
c1.relation(c2) 结果为 同心圆
4
toString()
调用 p1.toString()
返回 “(0,0)”
5
toString()
调用 c1.toString()
返回 “(0,0),0”
6
equals() 方法
创建实验 4.Point() 对象 p1 和实验
4.Point(0,10) 对象 p2
调用 p1.equals(p2) 时返回 false
7
equals() 方法
创建实验 4.Point() 对象 p1 和实验
4.Point(0, 0) 对象 p2
调用 p1.equals(p2) 时返回 true
8
equals() 方法
创建实验 4.Point() 对象 p1 实验
2.Point(0, 0) 对象 p2
调用 p1.equals(p2) 时返回 true
9
equals() 方法
创建实验 4.Point() 对象 p1 实验
2.Point(0, 0) 对象 p2
调用 p2.equals(p1) 时返回 false (因为实
2.Point 还没有重写 equals 方法)
10
equals() 方法
创建实验 4.Circle() 对象 c1 和实验
4.Circle(0,0,10) 对象 c2
调用 c1.equals(c2) 时返回 false
11
equals() 方法
创建实验 4.Circle() 对象 c1 和实验
4.Circle(0,0,0) 对象 c2
调用 c1.equals(c2) 时返回 true
12
equals() 方法
创建实验 4.Circle() 对象 c1 、实验
4.Point(0,0) 对象 p 和实验
4.Circle(p,0) 对象 c2
调用 c1.equals(c2) 时返回 true
调用 c1.equals(p) p.equals(c1) 皆返回
false
13
equals() 方法
创建实验 4.Circle() 对象 c1 实验
2.Point(0,0) 对象 p 和实验
4.Circle(p,0) 对象 c2
调用 c1.equals(c2) 时返回 true
14
equals() 方法
创建实验 4.Circle() 对象 c1 实验
2.Circle(0,0,0) 对象 c2
调用 c1.equals(c2) 时返回 true 调用
c2.equals(c1) 时返回 false
Circle.java
package 实验4;

public class circle extends 实验2.Circle{
    public circle(){
        super();
    }
    public circle(int x,int y,int r){
        super(x,y,r);
    }
    @Override
    public boolean equals(Object obj) {
        if(obj!=null && obj.getClass()==circle.class){
            circle cir=(circle)obj;
            return (getCenter().getX()==cir.getCenter().getX() &&
                    getCenter().getY()==cir.getCenter().getY() &&
                    getRadius()==cir.getRadius());
        }
            return false;
    }

    @Override
    public String toString() {
        int x=getCenter().getX();
        int y=getCenter().getY();
        return "("+x+","+y+","+getRadius()+")";
    }
}

Point.java

package 实验4;

public class Point extends 实验2.Point {
    public Point(){
        super();
    }
    public Point(int x,int y){
        super(x,y);
    }
    @Override
    public boolean equals(Object obj) {
        if(obj!=null && obj.getClass()== Point.class) {
            Point point=(Point)obj;//向下转型object还原为point类
            return (getX()==point.getX() && getY()==point.getY());
        }
        return false;
    }
    @Override
    public String toString() {
        return "("+getX()+","+getY()+")";
    }
}

Test.java

package 实验4;

import 实验2.Point;

import java.util.Scanner;

public class Test {
    static private Point A,B,C;
    static private circle D,E,F;
    public static void main(String[] args) {
        int op;
        do{
            Scanner s = new Scanner(System.in);
            System.out.println("(1)创建三点三圆;");
            System.out.println("(2)测试toString()方法;");
            System.out.println("(3)测试equals()方法;");
            System.out.println("(0)退出程序;");
            op=s.nextInt();
            switch (op){
                case 0:
                    break;
                case 1:
                    build();
                    break;
                case 2:
                    testToString();
                    break;
                case 3:
                    testEquals();
                    break;
                default:
                    System.out.println("请输入有效数字!");
            }
        }while (op!=0);
    }
    public static void build(){
        A=new Point();
        B=new Point();
        C=new Point(1,1);
        D=new circle();
        E=new circle();
        F=new circle(1,1,1);
        System.out.println("成功!");
    }
    public static void testToString(){
        System.out.println("Point:");
        System.out.println("A:"+A.toString());
        System.out.println("B:"+B.toString());
        System.out.println("C:"+C.toString());
        System.out.println("Circle");
        System.out.println("D:"+D.toString());
        System.out.println("E:"+E.toString());
        System.out.println("F:"+F.toString());
    }
    public static void testEquals(){
        System.out.print("A-B:");
        if(A.equals(B)){
            System.out.println("相等");
        }
        else{
            System.out.println("不等");
        }
        System.out.print("B-C:");
        if(B.equals(C)){
            System.out.println("相等");
        }
        else{
            System.out.println("不等");
        }
        System.out.print("D-E:");
        if(D.equals(E)){
            System.out.println("相等");
        }
        else{
            System.out.println("不等");
        }
        System.out.print("E-F:");
        if(E.equals(F)){
            System.out.println("相等");
        }
        else{
            System.out.println("不等");
        }
    }
}

一、实验目的 掌握根据实际需求设计Java的方法; 掌握Java中继承的使用方法; 掌握Java中package的概念和使用方法; 掌握静态方法的定义和使用方法; 掌握Object中equals方法和toString方法的覆盖方法。 二、实验内容 1、设计一个名为figure的图形软件包(package)。包中包含三角形、矩形、圆三个。要求:(1)每个都要构造方法并为成员设置get和set方法;(2)每个都要有计算周长和面积的成员方法;(3)完成该软件包后的编码后,在另一个包的含有main方法的中编写代码,分别使用图形软件包中的三个,生成三个对象,并打印出其周长和面积。 2、编写Factorial,为其添加两个静态方法(方法名自定义)。其中一个使用递归计算n的阶乘,一个使用非递归计算n的阶乘。构造main方法进行测试。 3、按照要求使用Java进行编码。 设计一个教师Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary),为这些属性设置相应的get和set方法; 为Teacher重写equals方法;(当两个教师对象的no相同时返回true) 重写Teacher的toString方法,通过该方法可以返回“编号为**、姓名为**、年龄为**的**学院老师”形式的字符串。 构造main方法进行测试。 4、设计一个带表头的单链表(链表中的元素属于同一型对象,但对象的型可以随意),提供以下操作:(1)insert:在某个位置插入对象;(2)delete:在某个位置删除对象;(3)delete:删除链表中与x相同的元素;(4)size:返回当前链表中对象的个数;(5)isEmpty:判断链表是否为空;(6)traverse:遍历链表,打印出所有的元素;(7)getData:取得某个位置的对象。构造main函数进行测试。
内容概要:《机器人综合基础实践教程》(入门篇、提高篇)涵盖了机器人基础构建、编程控制、传感器应用等多个方面。教程从机械零件简介入手,逐步介绍主控板和编程环境的配置,随后通过一系列实验引导读者动手实践,包括驱动轮模块、双轮万向车、红外启动小车、带传动模块、履带机器人、红绿灯等实验。这些实验不仅帮助读者理解基本原理,还涉及高级应用如蓝牙电子温度计、语音识别、双轮小车平衡、蓝牙排爆机器人和WiFi视频排爆等。教程旨在培养读者的空间构型能力、编程技巧和综合调试能力,为机器人技术的实际应用打下坚实基础。 适用人群:具备一定编程基础和技术兴趣的学生、教师及爱好者,特别是对机器人技术感兴趣的初学者和中级学习者。 使用场景及目标:①帮助学生理解机器人基本原理,掌握机械零件组装和编程控制;②通过实际操作,提升编程和调试技能;③为机器人竞赛、项目开发和创新实践提供理论和实践指导;④培养创新思维和解决实际问题的能力。 其他说明:教程不仅提供详细的实验步骤和代码示例,还配有丰富的参考资料和光盘课件,确保学习者能够全面理解和掌握知识点。此外,教程强调实践操作的重要性,鼓励学习者通过动手实验加深理解,培养独立思考和解决问题的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值