在扩展类中使用此VS setter

时间:2017-05-20 13:26:11

标签: java

有什么理由我不应该使用setter而不是“super”和“this”来在扩展类中创建默认对象?

示例

public class Foo{

    private String foo;

    public Foo(){
    }

    public Foo(String foo){
        this.foo = foo;
    }

    public void setFoo(String foo){
        this.foo = foo;

}

扩展类使用“this”创建一个带有预设String foo的Bar。

public class Bar extends Foo{

    public Bar(String foo){
        super(foo);
    }

    public Bar(){
        this("foobar");
    }
}

使用setter创建带有预设String foo的Bar的扩展类。

public class Bar extends Foo{

    public Bar(){
        setFoo("foobar");
    }
}

据我所知,他们都有相同的结果。 有没有理由为此目的使用setter?

1 个答案:

答案 0 :(得分:1)

在我看来,使用setter初始化并不是一个好习惯,它会降低代码的可读性和耦合度。如果使用setter进行初始化,那么读取constuctor代码的人还需要读取setter中的代码,以确保没有任何意外情况发生。此外,如果某人需要向setter添加一些额外的代码,她将需要检查代码对构造函数的影响。