JavaSE(工具的保护及合情)

工具的保护——权限修饰符

首先对于工具的设计理念:工具不仅是为了完成当下的项目开发而设计的,更应该从“未来可再次使用”的角度思考
在数据结构与算法的学习中,在表达式时讲到了对工具内部的保护,定义的结构体我们并不想要用户直接用struct.abc来修改结构体内部数据,但是C语言并没有提供相应的功能。
但是java提供了三个权限修饰符:public、protected、private
public:其修饰的成员与方法,可以在类外任意访问(读/写)
private:其修饰的成员和方法,只能在类的内部进行访问

基于上面,对SimplePoint进行一些修改:

class SimplePoint{
	private int row;
	private int col;

	public void printPoint() {
		System.out.println("(" + row + ", " + col + ")");
	}

	public void moveTo(int newRow, int newCol) {
		row = newRow;
		col = newCol;
	}
}

当程序在row,col前加了private之后,用户就无法用pointOne.row = 3;对类的成员直接赋值了
但是对应的,想要把row,col投入使用,我们需要新增对其值进行更改的函数(方法):

class SimplePoint{
	private int row;
	private int col;

	public void setRow(int x) {
		row = x;
	}

	public int getRow() {
		return row;
	}

	public void setCol(int y) {
		col = y;
	}

	public int getCol() {
		return col;
	}

	public void printPoint() {
		System.out.println("(" + row + ", " + col + ")");
	}

	public void moveTo(int newRow, int newCol) {
		row = newRow;
		col = newCol;
	}
}

通过上面的修改,不难看出类的成员已经被保护起来了,只能由方法对其进行赋值、获取。
接下来对调用也进行一些修改:

class DemoSimplePoint{
	public static void main(String[] args) {
		SimplePoint pointOne = new SimplePoint();
		pointOne.setRow(3);
		pointOne.setCol(4);
		pointOne.printPoint();

		pointOne.moveTo(13, 2);
		pointOne.printPoint();
	}
}

通常情况下,类的成员都需要private的保护,而类的方法都是public的,以便公开调用

工具要合理更要合情

重新审视一下上面对于工具保护的修改,虽然这样成员被保护起来了,只能通过方法进行访问,但实际上真的有必要么?
此外,因为程序基于屏幕点坐标管理,行、列都有限制:25行,80列
故我们的row和col成员的值存在有效取值范围。
因此在方法中,通过setRow()和setCol()可以增加“对用户赋值操作进行‘监控’的代码和逻辑”,从而保证row和col成员的值合情合理
如下:

public void setRow(int x) {
		if (x <= 0 || x >= 25) {
			x = 1;
		}
		row = x;
	}
	
public void setCol(int y) {
		if (y <= 0 || y >= 80) {
			y = 1;
		}
		col = y;
	}

其中x = 1; y = 1;的1是在有效值范围内随意取的,即为“默认值”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魔幻音

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

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

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

打赏作者

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

抵扣说明:

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

余额充值