我们为什么要使用getter和setter方法?
我们为什么要使用getter和setter方法?
为什么我们要使用Getter和Setter方法?它们占据了我们代码中的额外空间,有人能解释一下吗?我在下面贴了一些代码以便更好地理解。\n
public class Test2 { public int _ChangeThis = 0; }
\n--- 其他方式 ---\n
public class Test1 { public int _ChangeThis = 0; public setChangeThis(int ChangeThis) { _ChangeThis = ChangeThis; } }
\n--- 主代码 ---\n
Test2 testclass = new Test2(); //这两种方式有什么区别,为什么我们要使用setter?我无法理解它的优势。 testclass.setChangeThis(1); testclass._ChangeThis = 1;
我们为什么要使用getter和setter方法呢?简单来说,getter和setter方法是对对象实现的一种抽象封装。你可能有一个对象的属性,实际上(举个例子)是根据其他字段成员的值计算得出的,但并未在类中存储或保留。因此,getter方法创造了一个假象,使得属性本身在类中是本地的,而其实现却大相径庭。此外,没有setter的getter方法允许你创建只读属性,并保护类的内部成员免受无意和可能破坏性的修改。
这一切都是为了将被其他应用程序使用的外部表示与内部实现分离开来。这就是基本原理。
在面向对象编程中,封装是一种关键的原则。它允许我们隐藏实现的细节,并提供一种更简洁、更直观的方式来访问和修改对象的属性。getter和setter方法是实现封装的一种方式。
getter方法用于获取对象的属性值,而setter方法用于设置对象的属性值。通过使用这些方法,我们可以在需要的时候对属性进行验证、计算或限制访问。这使得我们能够更好地控制对象的状态和行为。
例如,在一个银行账户类中,我们可以使用getter方法来获取账户的余额,而使用setter方法来设置账户的余额。这样,我们可以在设置余额时对其进行验证,确保余额不为负数或超出特定限制。
public class BankAccount { private double balance; public double getBalance() { return balance; } public void setBalance(double balance) { if (balance >= 0) { this.balance = balance; } else { throw new IllegalArgumentException("Balance cannot be negative"); } } }
在上面的例子中,我们使用了getter方法来获取账户余额,并使用setter方法来设置账户余额。在setter方法中,我们添加了一个条件判断来确保余额不会为负数。
另外,getter和setter方法还允许我们创建只读属性。只读属性是指只有getter方法,没有setter方法的属性。这样,外部代码只能读取属性的值,而无法修改它。这对于保护对象的状态和数据的完整性非常有用。
public class Person { private String name; private int age; public String getName() { return name; } public int getAge() { return age; } }
在上面的例子中,我们只提供了getter方法,而没有提供setter方法。这意味着外部代码可以读取一个人的姓名和年龄,但无法修改它们。
总之,getter和setter方法是面向对象编程中的常用技术,它们允许我们封装对象的属性,并提供更好的控制和保护。通过使用getter和setter方法,我们可以将对象的内部实现和外部表示分离开来,使代码更加模块化、可维护和灵活。