为啥这里要新定义一个getvalue函数获取返回值
我试着直接在increased函数里用return返回,结果输出不对了
引自免费微信小程序:皆我百晓生
在 Java 中,getValue()
函数的作用是提供一个访问类内部变量 value
的公共接口。这样做有几个原因:
封装性(Encapsulation):将数据隐藏起来,并通过公共方法访问,这是面向对象编程的一个基本原则。这样可以保护数据不被随意修改,确保数据的一致性和安全性。
读写权限控制:如果你只提供了 getValue()
而没有提供直接修改 value
的方法,那么外部代码只能通过调用 increased()
方法来改变值,从而间接地控制 value
的变化。这种方式使得你可以添加额外的逻辑,比如检查限制条件等。
多态性(Polymorphism):如果你有多个子类继承了 display
类,它们可能有不同的计算规则,但外部代码可以通过统一的 getValue()
接口来获取值,无需关心具体实现细节。
如果你想直接在 increased()
函数中返回值,这会导致以下问题:
increased()
并打印返回值,每次调用都会立即返回新的值,而不是等待循环执行完再输出整个时间。value
,破坏了类的内部状态管理。为了保持代码结构良好并遵循面向对象编程的原则,你应该继续使用 getValue()
来获取值。如果你在 increased()
中也需要返回值,可以考虑返回一个布尔值来表示是否已达到限制并重置。
这里是修改后的代码:
// display.java
public class Display {
private int value;
private int limit;
public Display(int limit) {
this.limit = limit;
}
public void increased() {
value++;
if (value == limit) {
value = 0;
return true; // 返回一个布尔值,表示是否重置
}
return false; // 没有重置
}
public int getValue() {
return value;
}
}
// clock.java
public class Clock {
private Display hour = new Display(24);
private Display minute = new Display(60);
public void start() {
while (true) {
minute.increased();
if (minute.getValue() >= 60) {
minute.value = 0; // 直接修改内部状态,不推荐,仅作示例
hour.increased();
}
System.out.printf("%02d:%02d\n", hour.getValue(), minute.getValue());
}
}
public static void main(String[] args) {
Clock clock = new Clock();
clock.start();
}
}
这段代码中,我在 Display
类的 increased()
方法中添加了一个布尔返回值,用来标记是否达到了限制并进行了重置。然后在 Clock
类的 start()
方法中处理这个返回值,当分钟达到限制时,更新小时。注意,这里直接修改了 minute.value
,这不是一个好的做法,应该通过调用 increased()
方法来保证封装性。不过,这里这么做是为了让你看到区别。在实际应用中,应遵循之前提到的最佳实践。