Java 面向对象之Point类实现:从构造方法到对象操作全解析
一、题目代码呈现
以下是一道关于Java类设计的基础题目,核心是实现一个表示平面点的Point
类,包含构造方法、坐标操作等功能,并通过主程序验证。题目包含4处空白,需根据面向对象逻辑补全:
class Point{
public int x,y;
public Point() {
}
public Point(int x,int y){
this.x = x;
this.y = y;
}
//*********Found**********
public Point(____________ p){
x = p.x;
y = p.y;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public void moveTo(int x,int y){
this.x = x;
this.y = y;
}
public void moveTo(Point p){
x = p.x;
y = p.y;
}
public String toString(){
return "("+ x + ","+ y + ")";
}
public void translate(int dx,int dy){ //平移
this.x += dx;
//*********Found**********
____________;
}
}
public class Java_2 {
public static void main(String args[]){
//*********Found**********
Point p = new ____________(5,5);
System.out.println("点的当前坐标:("+p.x + "," + p.y+")");
p.translate(3,4);
//*********Found**********
System.out.println("平移到:"+____________());
}
}
二、空白处解析与解答
1. 第一空:拷贝构造方法的参数类型
答案:Point
public Point(Point p){
x = p.x;
y = p.y;
}
解析:
此方法是拷贝构造方法,作用是通过一个已有的Point
对象p
来初始化新对象。方法体内通过p.x
和p.y
获取参数对象的属性值,因此参数必须是Point
类型的对象,故填写Point
。
2. 第二空:平移方法中y坐标的更新逻辑
答案:this.y += dy
public void translate(int dx,int dy){ //平移
this.x += dx;
this.y += dy;
}
解析: translate
方法的功能是让点沿x轴和y轴分别平移dx
和dy
个单位。已通过this.x += dx
完成x坐标的更新,对应地,y坐标需通过this.y += dy
实现累加偏移,故填写this.y += dy
。
3. 第三空:Point对象的实例化类名
答案:Point
Point p = new Point(5,5);
解析:
创建对象时需调用Point
类的构造方法Point(int x, int y)
,实例化语法为new 类名(参数)
,因此此处类名应为Point
,填写Point
。
4. 第四空:获取点坐标的字符串表示方法
答案:p.toString
System.out.println("平移到:"+p.toString());
解析: Point
类重写了toString()
方法,返回格式为(x,y)
的字符串。此处需调用该方法获取平移后的坐标字符串,通过对象p
调用,故填写p.toString
。
三、完整正确代码
四、程序功能与运行结果
核心功能
Point
类:封装平面点的x、y坐标,提供多种构造方法(无参、带坐标、拷贝构造),以及坐标获取、移动、平移等操作。- 主程序:创建初始坐标为
(5,5)
的点,调用平移方法(沿x轴+3,y轴+4),输出平移前后的坐标。
运行结果
点的当前坐标:(5,5)
平移到:(8,9)
五、核心知识点详解
1. 构造方法的重载
- 重载定义:在同一类中,方法名相同但参数列表不同的方法(构造方法也支持重载)。
Point
类的3种构造方法:- 无参构造:
public Point(){}
(默认初始化,x、y为0); - 带坐标参数:
public Point(int x,int y)
(通过具体数值初始化); - 拷贝构造:
public Point(Point p)
(通过已有对象初始化,实现对象复制)。
- 无参构造:
2. this
关键字的作用
- 区分成员变量与局部变量:如
this.x = x
中,this.x
指对象的成员变量,右侧x
是方法参数; - 指代当前对象:
this.y += dy
中,this
明确表示当前调用方法的Point
对象。
3. 方法的设计逻辑
translate
(平移):通过累加偏移量修改坐标(x += dx
,y += dy
),属于“相对移动”;moveTo
(移动到):直接设置坐标为目标值(绝对位置),提供两种重载形式(支持直接传坐标或Point
对象);toString
重写:覆盖Object
类的默认实现,返回可读性更强的坐标字符串(便于打印输出)。
4. 对象的使用流程
- 实例化:
new Point(5,5)
创建对象,内存中分配空间并初始化属性; - 方法调用:通过对象引用
p
调用translate(3,4)
和toString()
,完成操作并获取结果; - 属性访问:直接访问
public
修饰的x
、y
(简化代码,实际开发中建议用getX()
/getY()
封装)。
六、常见错误与避坑指南
空白处 | 典型错误 | 错误原因 | 正确思路 |
---|---|---|---|
第一空 | int /Object | 参数类型与方法体中p.x 矛盾 | 拷贝构造需接收同类对象 |
第二空 | y = dy | 直接赋值而非累加偏移量,逻辑错误 | 平移是“原有坐标+偏移量” |
第三空 | point /Point() | 类名大小写错误,或多写空括号 | 实例化语法为new 类名(参数) |
第四空 | toString() /p | 缺少对象引用,或直接打印对象(输出地址) | 需通过对象调用toString() |
七、学习总结
本题是面向对象编程的入门级实践,核心在于理解:
- 类的封装性:将点的属性(x、y)和操作(平移、移动)封装在
Point
类中; - 构造方法的作用:初始化对象,重载构造方法可满足不同创建场景;
- 方法设计原则:单一职责(如
translate
仅负责平移),重载方法提升灵活性。
掌握这些基础概念,是理解更复杂类设计和面向对象思想的关键。