public interface Hi1 {
public void sayHi(String name);
}
public class HiImpl1 implements Hi1{
String name;
@Override
public void sayHi(String name) {
this.name=name;
System.out.println("hi - "+name);
}
------------------------分隔符------------------------------
public interface Hi 2{
public void sayHi();
}
public class HiImpl2 implements Hi2{
String name;
public HiImpl(String name) {
this.name=name;
}
public void sayHi() {
System.out.println("hi "+name);
}
}
```第一种是自己写的,第二种是书上的
是的,你理解的没错,结果是一样的,只是触发执行的时间不同,构造函数里面的时候,实例创建的时候就初始化了,而且构造函数必须是有参构造函数。
普通方法中设置,则就是属性的 getter/setter 方法,如果不调用该属性的 setter 方法完成属性赋值,就可能会出现属性空指针异常了。
第二种方法:在构造器处入参name,也就是说你在new出的对象的时候就必须赋值name了
第一种方法:在调用方法sayHi的时候才需要入参name
构造器的this,是谁调用就代表谁,本地的方法是自己.
在构造函数里,这个代码必然会被调用,不能被绕过
在一般方法里,这个不是强制的
如果你要求必须强制被传name,就要用构造函数
效果是一样的,执行顺序不同而已,放在构造方法中,在你创建对象的时候就会赋值,而且你不对创建的对象进行修改,这个值不会变,放在方法中在你调用这个方法的时候会赋值,而在这个方法调用结束的时候你就获取不到了。这个就是有个参数有效期的问题。这个没有复用性可以比较,要看使用的场合,