对象方法的引用通过对象名.方法名引用。如有以下方法:
public void work(){}
public void work(int h){}
对象名是work,那么对象方法的引用就是work.work(10);
此外,对象方法引用为最后一层,不允许引用对象方法内的组成部分。方法内部定义的变量属于局部变量。
对象属性的引用通过对象名.属性名引用。如有如下属性:
String name;
int age;
double salary;
对象名work,那么对象属性的引用就是work.name。但是对象属性可能是另一个对象,此时我们需要访问另一个对象下的某一个属性,那么引用就是对象名.属性名.属性名……。如下代码:
Address addr;
class Address{
String address;
}
假设addr是work的一个属性,此时我们需要引用address这个属性,那么引用方法就是work.addr.address。
现在我们定义了以下两个类;
class Worker{
String name;
int age;
double salary;
Address addr;
public void work(){}
public void work(int h){}
public Worker(){}
public Worker(String s, int i, double d){
name = s;
age = i;
salary = d;
}
}
class Address{
String address;
int zipCode;
public Address(){}
public Address(String s, int i){
address = s;
zipCode = i;
}
}
现在我们需要创建一个Worker对象,对象名为work。那么我们现在如何对addr进行赋值呢?
无论是方法还是函数都是可以带参数的,那么这里就有一个问题——参数类型。我们知道类也是一种类型,因此在传递参数的时候就可以分为两类——传值和传址。8种基本数据类型都是传值,类就是传址。
因此对addr赋值时,可以在构造方法中传址赋值。构造方法可以改写为public Worker(String s, int i, double d,Address A)。但同时需要注意的是,在传递参数的时候,参数必须是已知的,具有明确的存储空间和数值。就是说传递对象地址时,对象必须要被准确地创建。因此在创建work时,要对work.addr赋值,需要先创建一个Address的对象,我们假设对象名是dress。则传递的参数形式应该为public Worker("das",3, 3.4,dress).
也可以直接对属性赋值,即work.addr = dress;
现在我们已经创建了两个对象了:dress,work;现在我们需要访问address属性,这里有两种方法:
1、dress.address
2、work.addr.address
但是我们不能这样引用:work.dress.address或者work.address,这样的引用方法会编译报错。这里dress,work都是对象,我们不能引用对象中的对象,只能引用对象中的属性和方法。
因此我们得到一个对象引用的规则:对象只能直接引用他的直接组成部分——属性和方法。方法内部的组成部分不允许被引用,不能直接引用属性内部的组成部分。对象不允许引用对象。