在使用intelliJ时,我建议通过删除访问修饰符来使方法本地化。我意识到我真的不知道使用哪种修改器以及何时需要澄清。
我读过这篇文章:What is the difference between Public, Private, Protected, and Nothing?
和C#一样,虽然它们很相似,但我想确保它没有太大差异。
我还在这里阅读了Javadoc帖子:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
并且仍然有点怀疑。
先谢谢!
答案 0 :(得分:3)
访问修饰符有助于OOP封装原则。如果你创建一个写得很好的类,任何人都可以在不知道其工作原理的所有内部细节的情况下使用它。将方法定义为公共时,任何使用您的类的代码都可以访问该方法。您只想公开您的类的最终用户需要的方法。如果它是一个辅助方法,它只会在您的类中进行一些内部计算,请将其声明为私有。它将减少最终用户可用的方法,使您的课程更容易使用。这是一个例子:
Public Class Car {
private int speed;
private float fuelNeeded;
private float afRatio = 14.7;
public void speedUp { speed++; }
public void speedDown { speed--; }
public float getFuelNeeded {
calculateFuelNeeded(speed);
return fuelNeeded;
}
private void calculateFuelNeeded (int speed) {
// Do some complex calculation
fuelNeeded = someValue / afRatio;
}
}
创建Car对象的任何人都有三种方法,speedUp,speedDown和getFuelNeeded。 calculateFuelNeeded仅在类内部使用,因此用户没有理由看到它。通过这种方式,他们不需要知道如何计算金额,或者何时需要调用方法,或者内部设置的值。他们只需使用getFuelNeeded();
轻松获得价值在声明变量时,将它们声明为私有通常总是正确的,对于需要从类外部访问的任何变量具有公共get()和set()方法。这样做的主要原因是为了防止外部用户将值设置为无效。在我们的Car类中,afRatio必须非零,因为我们将它用作除数。如果我们将其声明为公共,用户可以轻松编写此代码:
Car car = new Car();
car.afRatio = 0;
someFloat = car.getFuelNeeded();
当然这会导致我们的类为divis抛出ArithmeticException。但是,如果我们这样做:
private afRatio = 14.7;
public void setAfRatio(float ratio) {
if(ratio <= 0)
throw new IllegalArgumentException("A/F ratio must be greater than zero");
afRatio = ratio;
}
这允许我们检查用户给定的参数,并确保我们的变量不会设置为某个无效值。