"受保护"和"公共"的可见性对于课堂领域是否无用?

Mat*_*oli 5 java oop encapsulation

它被认为是最佳做法封装使用private与存取(getter和setter)领域,而不是protectedpublic领域.

所以,按照这一最佳做法,我们从来没有使用protectedpublic了.他们变得无用,或者他们的用例是什么?

我唯一能想到的是公共static final属性(即类常量).

注意:Java世界中至少有这种情况,但问题代表所有语言.

Pab*_*afi 2

最佳实践可能会随着时间而改变。
我可以想到公共领域的两个用例,这两个用例都存在争议。
Adam Bien在这篇文章中说,如果您使用 DTO,则不能使用 private + getter + setter,而只能使用公共字段。这样您就可以确保数据按原样传输,而不进行任何更改。但他同时补充道,这将花费你很多时间来解释为什么你这样做......

非常量公共字段的另一个用途是使用公共最终字段(在构造函数中初始化)来确保不变性。让你的课程像

public Person{
    public final String lastName;
    public final String firstName;
    public Person(String firstName, String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

是某种新的最佳实践,在codemonkeyism等地方建议使用。

但是,除非您是代码的绝对所有者和/或您可以强制满足新标准,否则您应该继续避免使用公共/受保护的字段......