在java中公共/私有/其他方法的含义是什么意思?

Dav*_*vid 9 java methods

在java中公共/私有/其他方法的含义是什么意思?
这些选项有哪些优缺点?
作为一个想成为优秀程序员的人,我的动力是什么呢?

Osc*_*Ryz 14

当方法是公共的时,意味着它可以被其他对象访问

例如:

class David {
     // public method, can be use by anyone
     public String getName() {
         return "David";
      }
 }
Run Code Online (Sandbox Code Playgroud)

getName其他类可以访问该方法,因为它是公共的:

 class Other  {
      David davidOne = new David();
      String davidsName = davidOne.getName(); //<-- compiles and runs
 }
Run Code Online (Sandbox Code Playgroud)

优点..你可以从其他地方使用它.

当一个方法是私有的时,它意味着它只能被同一类的对象访问

例如,在这个新定义中:

class David {
     public String getName() {
         return "David";
     }
     // private method... nobody but David's "instances" can use it.. 
     private int getAge() {
         return 19;
     } 

 }
Run Code Online (Sandbox Code Playgroud)

getAge其他类无法访问该方法,因为它是私有的,如果你尝试这样做,编译器会给你一个错误信息:

 class Other  {
      David davidOne = new David();
      String davidsName = davidOne.getName(); 
      int davidsAge = davidOne.getAge(); //<-- Compiler error, getAge() is not visible
 }
Run Code Online (Sandbox Code Playgroud)

但是,如果你可以 David课程中使用它:

class David {
     public String getName() {
         return "David";
     }
     // private method... nobody but David's "instance" can use it.. 
     private int getAge() {
         return 19;
     } 
     // Here the call to "getAge()" will succeed, because it is visible 
     // inside the class 
     public boolean hasSameAgeAs( David otherDavid ) {
         return this.getAge() == otherDavid.getAge();
     }
 }
Run Code Online (Sandbox Code Playgroud)

优势?您可以创建一堆方法并将它们保密,避免数据损坏或一般保留封装的对象

关于封装

OOP(面向对象编程)中,目的是在现实生活对象之后对软件进行建模.

现实生活对象具有(以及其他)访问这些属性的属性和方法.

你想公开一些这些方法,并保持其他人的私密性.

例如,一个,有一颗心.但它并没有暴露给所有人,这将是危险的.它被封装在我们体内.

如果我们要在一个真正的人类之后建模软件,我们可以声明方法:heartBeat 私有(所以,没有人可以访问它)

另一方面,有一些公共方法可以帮助getGender您了解您的Human实例是男性还是女性.

还有其他访问修饰符,例如:"protected"和package protected(没有关键字)

 class David {
      // protected method
      protected int getBalance() { 
          return 1000000; 
      }
      // package protected or "default" method
      boolean knowsOop(){ 
          return true;
      }
 }
Run Code Online (Sandbox Code Playgroud)

那里的方法getBalance只能由David实例和David子类接受(为什么是子类创建另一个线程)

knowsOop 定义David时,该方法可以由包内的任何人访问.

不要担心这两个访问修饰符,当您了解有关OOP和Java的更多信息时,它们将有意义.

最后你应该真的,真的需要时间阅读:

http://java.sun.com/docs/books/tutorial/java/javaOO/index.html

我希望这有帮助


Mne*_*nth 5

可以从任何地方访问公共方法,只能从同一个类访问私有方法.主要优点是控制类的API.如果我只公开所需的东西,我可以改变类的内部行为,而不会破坏代码,具体取决于这个类.您应该关心,因为软件经常在现实世界中发生变化(至少这是我的经验,而其他人也有变化),每次更改都会中断,您需要投入的维护能量越多,或者软件的错误就越多.最后,这是一个成本问题.

将类的内部隐藏到此类的用户以避免以后更改中断代码的可能性通常称为封装或信息隐藏.

除了公共和私有之外的两个选项是包(没有修饰符)和受保护.也可以从同一个包的类中访问包可访问的方法.我不记得以任何有用的方式使用该选项.可以从继承有问题的类的类访问受保护的方法.这通常用于为基类的已定义API创建具有具体行为的类.例如,你可以通过扩展AbstractList来实现一个新的List类,你只需要实现get和size(以及一个可修改列表的set-method).List的API公开的其他方法在基类中定义,如果需要,调用其他三种方法.