public class JavaWork {

private Tester tester;

public void setTester(Tester tester) { 
this.tester = tester;
}
public void doTest() {
    tester.test();
}
}tester 就一个Interface 实例,不是已经定义了吗? ——private Tester tester; 下面这句public void setTester(Tester tester) ,为什么还要定义它呢? 要是不定义就报错,这是为什么?

解决方案 »

  1.   

    private Tester tester;   这句是定义了,但是没有实例化
    Tester tester=new  Tester();才能直接使用
      

  2.   

    private Tester tester; 是定义私有成员变量,并没有实例化。
    public void setTester(Tester tester) 的Tester tester是方法的型参,通过这个方法来传Tester的实例。
      

  3.   

    private Tester tester;这句定义的tester没有实例化,他的值是null,null是不能调用任何方法的,所以当你没有调用setTester这个方法实例化它的时候,如果调用了doTest方法是会报nullpointexception的
      

  4.   

    private Tester tester 和 public void setTester(Tester tester)里的tester哪怕名字一样 默认也是2个变量, 前面一个是类定义变量,后面是引用的参数变量,所以参数变量也需要定义,一般为了读程序的人方便 把参数变量名和类变量名取相同名字,实际上参数变量名可以取其他名字。不然的话你怎么理解 this.tester = tester; 
      

  5.   

    你没有给tester赋值,程序如果调用Tester类的doTest()方法,会直接报空指针异常的!
      

  6.   

    Tester tester叫做声明了一个对象,只做声明,没有实例或者引用,想要调用它的非静态方法必须先实例化
      

  7.   

    private Tester tester;
     默认tester=null,null不能调用方法 ,所以要对tester进行实例化
      

  8.   

    private Tester tester;是私有的只能在本类定义;所以必须要对tester,添加一个复制的公开的方法,或者一个有参的构造方法
      

  9.   


    interface Tester{
    public void test();
    }class JavaWork { private Tester t1;public void setTester(Tester tester) { 
     tester = t1;
    }
    public void doTest() {
        t1.test();
    }
    }
    这样你就会明白了,不会混了.
      

  10.   

    public void setTester(Tester tester),方法中的参数一定要给定类型,至少也是泛型,这里做的不是定义,只是规定了这个参数的类型是Tester
      

  11.   

    private Tester tester;
    这一行叫声明
    public void setTester(Tester tester) { 
    this.tester = tester;
    }
    这个方法作用是赋值,也就是常说的实例化
    Java是强类型语言,变量必须声明后使用
      

  12.   

    private Tester tester;只是声明一个变量(相当于C语言里的指针),并没有创建一个对象,所以需要给tester赋一个实例(即对象)。