实例变量与存取方法
2008-06-20 11:56
295 查看
实例变量
因此,我们根据对象的行为来定义实例,这在很多情况下是合理的,但一般来说,用户定义数据类型也应该包含状态变量。也就是说,对于每个 Dog 的实例,根据毛发颜色、重量等特征来区分是很重要的。区分 Dog 实例的状态变量称为实例变量。
现在我们增加一个实例变量来反应特定狗(dog)的叫声,一个 String 实例可以代表每个狗(dog)的叫声(bark):
class Dog {
String barkSound = new String("Woof.");
void bark() {
System.out.println(barkSound);
}
void bark(String barkSound) {
System.out.println(barkSound);
}
}
现在 Dog 的定义包括 barkSound 的实例变量。 每次一个新的 Dog 实例创建时,该实例包括一个 String 实例的引用变量表示特定狗(dog)的叫声(bark)。 该 实例 变量初始化为默认值 "Woof." 。 看看这行代码
String barkSound = new String("Woof.");
这条语句分配了一个初始化为 "Woof." (由括号后的 String 类名提供)的 String 实例,并将数据保存在引用变量
barkSound 中。值得注意的是引用变量 barkSound 是 Dog 每个实例的一部分,它引用一个 String 实例,这个
String 实例象 Dog 实例本身一样,是分配在堆里的:
现在默认的叫声行为用一个实例变量来表示,我们可以从原来的 bark() 方法中除去 "Woof." ,而使用 barkSound 的当前值的引用来取代:
void bark() {
System.out.println(barkSound);
}
也就是说,我们把一个无条件状态数据从方法定义转换为用来区分狗(dog)的实例变量,可能更重要的是,对每个特定的狗(dog),这个变量的值可以动态改变。。
存取方法(Access method)
为了让实例变量的值能够在需要的时候改变,我们应该提供一个方法来改变其值;这种方法被特别地称为存取方法(access method)。依照惯例,只是简单的用来改变实例变量值的方法名称应该以“set”开头:
void setBark(String barkSound) {
this.barkSound = barkSound;
}
上例中的方法很有意思,它对两个不同的变量用了同一个名字 barkSound。首先,作为参数定义的barkSound
是一个新的叫声(barking sound)。在此方法中所有对 barkSound
的没有限定的引用都指的是这个作为参数传入的数据。但是,我们还有一个为每个被初始化的狗(dog)提供的实例变量
barkSound。在Java(TM) 中,我们可以用特别的 "实例句柄(instance handle)" this 来指定 Dog
的当前实例。因此,
this.barkSound = barkSound;
语句将实例变量 (this.barkSound 的当前值改变成 setBark() 的参数 (barkSound)传入的新值。
为了更明白地说明 this 变量,假订我们为 Dog 创建了一个实例叫 fido,然后执行fido的方法setBark()
fido.setBark("Ruff.");
在setBark() 中的this 就是指 fido,更确切地说,this.barkSound 指的就是对象 fido 的 barkSound 实例变量。
在 DogChorus 的下面版本中,创建了一个对象 fido,将它的 barking 特征从默认的 "Woof." 改变为 "Ruff.",然后调用 barking 行为:
public class DogChorus {
public static void main(String[] args) {
Dog fido = new Dog();
fido.setBark("Ruff.");
fido.bark();
System.exit(0);
}
}
经过这种修改,象 fido 这样的对象,其特征就可以由实例(状态)变量的当前值和 Dog 中方法所定义的行为一起来反映。
因此,我们根据对象的行为来定义实例,这在很多情况下是合理的,但一般来说,用户定义数据类型也应该包含状态变量。也就是说,对于每个 Dog 的实例,根据毛发颜色、重量等特征来区分是很重要的。区分 Dog 实例的状态变量称为实例变量。
现在我们增加一个实例变量来反应特定狗(dog)的叫声,一个 String 实例可以代表每个狗(dog)的叫声(bark):
class Dog {
String barkSound = new String("Woof.");
void bark() {
System.out.println(barkSound);
}
void bark(String barkSound) {
System.out.println(barkSound);
}
}
现在 Dog 的定义包括 barkSound 的实例变量。 每次一个新的 Dog 实例创建时,该实例包括一个 String 实例的引用变量表示特定狗(dog)的叫声(bark)。 该 实例 变量初始化为默认值 "Woof." 。 看看这行代码
String barkSound = new String("Woof.");
这条语句分配了一个初始化为 "Woof." (由括号后的 String 类名提供)的 String 实例,并将数据保存在引用变量
barkSound 中。值得注意的是引用变量 barkSound 是 Dog 每个实例的一部分,它引用一个 String 实例,这个
String 实例象 Dog 实例本身一样,是分配在堆里的:
现在默认的叫声行为用一个实例变量来表示,我们可以从原来的 bark() 方法中除去 "Woof." ,而使用 barkSound 的当前值的引用来取代:
void bark() {
System.out.println(barkSound);
}
也就是说,我们把一个无条件状态数据从方法定义转换为用来区分狗(dog)的实例变量,可能更重要的是,对每个特定的狗(dog),这个变量的值可以动态改变。。
存取方法(Access method)
为了让实例变量的值能够在需要的时候改变,我们应该提供一个方法来改变其值;这种方法被特别地称为存取方法(access method)。依照惯例,只是简单的用来改变实例变量值的方法名称应该以“set”开头:
void setBark(String barkSound) {
this.barkSound = barkSound;
}
上例中的方法很有意思,它对两个不同的变量用了同一个名字 barkSound。首先,作为参数定义的barkSound
是一个新的叫声(barking sound)。在此方法中所有对 barkSound
的没有限定的引用都指的是这个作为参数传入的数据。但是,我们还有一个为每个被初始化的狗(dog)提供的实例变量
barkSound。在Java(TM) 中,我们可以用特别的 "实例句柄(instance handle)" this 来指定 Dog
的当前实例。因此,
this.barkSound = barkSound;
语句将实例变量 (this.barkSound 的当前值改变成 setBark() 的参数 (barkSound)传入的新值。
为了更明白地说明 this 变量,假订我们为 Dog 创建了一个实例叫 fido,然后执行fido的方法setBark()
fido.setBark("Ruff.");
在setBark() 中的this 就是指 fido,更确切地说,this.barkSound 指的就是对象 fido 的 barkSound 实例变量。
在 DogChorus 的下面版本中,创建了一个对象 fido,将它的 barking 特征从默认的 "Woof." 改变为 "Ruff.",然后调用 barking 行为:
public class DogChorus {
public static void main(String[] args) {
Dog fido = new Dog();
fido.setBark("Ruff.");
fido.bark();
System.exit(0);
}
}
经过这种修改,象 fido 这样的对象,其特征就可以由实例(状态)变量的当前值和 Dog 中方法所定义的行为一起来反映。
相关文章推荐
- 【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法
- Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- java的变量和方法,实例化new
- iOS入门(十六)实例变量可见度和方法
- 实例变量和成员变量的区别以及类方法的用法
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- //实现中等难度通讯录。需求: //1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
- ruby 的initialize方法 and 实例变量是怎么样工作的
- 3. 定义一个分数类(Fraction) 实例变量:分子,分母 方法:初始化方法(2个参数),便利构造器,约分,打印,加,减,乘,除。
- OC第二天-实例变量可见度,setter和getter方法,导入头文件 4000
- java反射_改变private中的变量及方法的简单实例
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- OC中对实例变量的相关处理方法——属性
- OC中实例变量初始化方法,setter方法以及便利构造器的不同
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
- 进击的KFC:OC(二)实例变量可见度、方法、setter、getter
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- OBJ-C实例变量修饰符;私有变量;私有方法;description;多态;点语法学习笔记