关于何时使用私有域和受保护字段的困惑

Des*_*PRG 4 java inheritance private public access-modifiers

我在SO中看到用户说受保护的字段很糟糕,因为它会随着代码的增长而引入问题.请参阅以下代码.

public class Car {
    private String modelName;
    private int yearReleased;

//getters and setters

}
Run Code Online (Sandbox Code Playgroud)

如果Car类由名为ToyotaCar的类扩展

public class ToyotaCar extends Car{
   // Toyota specific stuff
}
Run Code Online (Sandbox Code Playgroud)

我希望我的ToyotaCar对象有一个modelNameyearReleased字段.这就是为什么我决定延续Car class.但私有成员不是由子类继承的(即使我可以使用公共getter和setter访问这些字段).现在我的困惑在于我是否应该将Car类中的文件保护为保护而不是私有.但人们说这会带来问题.

这是否意味着无论你总是写什么课,让字段私有?

如果是,那么使用protected关键字的实例是什么?它只适用于我们计划在子类中使用的方法吗?

Mar*_*tin 5

你自己钉了它:一个好的做法是默认情况下使一切都"私密".然后,您的特定设计可能需要例如能够使用某些属性或(最好)子类内的某些方法.在这种情况下,你需要将它们移向'受保护' - 但仅限于那种情况.

请记住,使用访问器(getter和setter)是完全可以的,并且可以在不破坏封装的情况下完成.