在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方法,以及一些其他更复杂的封装方式,从而保证在复杂程序中的灵活性。
privatevar_pu_dataSource :Array!varpu_dataSource :Array! {
set{
self._pu_dataSource= newValue
}
get{
returnself._pu_dataSource
}
}
set是设置权柄或变量的语句;get是获取权柄或变量的语句。要先set设置,再get获取
如果set设置了,而没有get获取,所设置的权柄或变量就成了空null,虽然不会明显影响程度的运行,但这样的null多了,系统运行就会变得迟缓。
如果没有set设置,就想get获取,系统就会提示,读取的变量或参数为null,意思就是说,系统中,没有这样的权柄或变量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)