getter和setter方法

来源:互联网 发布:技术指标知乎 编辑:程序博客网 时间:2024/05/01 08:28
getter和setter方法

在Java中,一种简单常用的封装方式是使用getter和setter方法。下面这段代码是一个简单的命名为Contact的类的定义:

public class Contact { 
public String name; 
public int age; 
public String email; 

该定义使得外部对象能够直接访问类Contact的成员变量,如下所示:

Contact c = new Contact(); 
c.name = “Alice”; 
c.age = 13; 
c.email = “alice@mymail.com”; 
用过几次之后,发现Contact实际上需要包含多个email地址。遗憾的是,当在这个类的实现中增加多个地址时,整个程序中的每个调用Contact.email的地方都需要进行相应的修改。

下面这个类的情况与其相反:

class Contact { 
private int age; 
private String name; 
private String email; 
Contact(int age, String name, String email) { 
this.age = age; 
this.name = name; 
this.email = email; 
}

public int getAge() {      return age;  }  public String getName() {      return name;  }  public String getEmail() {      return address;  }  


在上面这个版本的Contact类中,使用了private访问修饰符,它不允许直接访问类的成员变量。提供了public类型的getter方法,使用方使用这些方法来得到所需要的Contact对象的name、age和email地址。例如,可以将email地址保存在对象内部,正如前一个例子那样,也可以使用username和hostname组合,只要这种方式对于给定的应用更便捷即可。在类的内部,成员变量age可以是int类型或integer类型。这个版本的Contact类可以做到支持多个email地址,而不需要对客户端有任何修改。

Java允许对成员变量直接引用,而它和某些语言不同,它不支持对getter和setter方法中的成员变量的引用进行封装。为了防止封装,必须自己定义每个访问方法。大多数IDE会提供代码生成功能,可以快速准确地完成这个功能。

通过getter和setter这种封装方法可以提供灵活性,因为直接的成员变量访问意味着如果某个成员变量的类型发生变化,则使用该成员变量的所有代码都需要进行修改。getter和setter方法代表的是一种简单的对象封装机制。一个良好的惯例是建议所有的成员变量都定义为private类型或final类型。编写良好的Java程序会使用getter和setter方法,以及一些其他更复杂的封装方式,从而保证在复杂程序中的灵活性。

原创粉丝点击