在java中公共/私有/其他方法的含义是什么意思?
在java中公共/私有/其他方法的含义是什么意思?
这些选项有哪些优缺点?
作为一个想成为优秀程序员的人,我的动力是什么呢?
当方法是公共的时 ,意味着它可以被其他对象访问
例如:
class David { // public method, can be use by anyone public String getName() { return "David"; } }
方法getName
可能被其他类访问,因为它是公共的:
class Other { David davidOne = new David(); String davidsName = davidOne.getName(); //<-- compiles and runs }
优点..你可以从其他地方使用它。
当一个方法是私有的时 ,意味着它只能被同一类的对象访问
例如,在这个新定义中:
class David { public String getName() { return "David"; } // private method... nobody but David's "instances" can use it.. private int getAge() { return 19; } }
其他类无法访问方法getAge
因为它是私有的,如果你尝试这样做,编译器会给你一个错误信息:
class Other { David davidOne = new David(); String davidsName = davidOne.getName(); int davidsAge = davidOne.getAge(); //<-- Compiler error, getAge() is not visible }
但是,如果你可以在 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(); } }
优势? 您可以创建一堆方法并将它们保密,避免数据损坏或通常保留封装的对象
关于封装
在OOP (面向对象编程)中,目的是在现实生活对象之后对软件进行建模。
实际对象具有(以及其他)访问这些属性的属性和方法。
你想公开其中的一些方法,并保持其他人的私密性。
例如,一个人 ,有一颗心。 但它并没有暴露给所有人,这将是危险的。 它被封装在我们体内。
如果我们要在真实的人类之后建模软件,我们可以声明方法: heartBeat
为private(因此,没有人可以访问它)
另一方面,像getGender
这样的公共方法可以找出你的Human实例是男性还是女性。
还有其他访问修饰符,例如:“protected”和package protected(没有关键字)
class David { // protected method protected int getBalance() { return 1000000; } // package protected or "default" method boolean knowsOop(){ return true; } }
方法getBalance
只能由David
实例和David
子类加入(为什么是子类创建另一个线程)
当定义David时,方法knowsOop
可以被包内的任何人访问。
不要担心这两个访问修饰符,当您了解有关OOP和Java的更多信息时,它们将有意义。
最后你应该真的,真的需要时间阅读:
http://java.sun.com/docs/books/tutorial/java/javaOO/index.html
我希望这有帮助
可以从任何地方访问公共方法,只能从同一个类访问私有方法。 主要优点是控制类的API。 如果我只公开所需的东西,我可以改变类的内部行为,而不会破坏代码,具体取决于这个类。 您应该关心,因为软件经常在现实世界中发生变化(至少这是我的经验,而其他人也有变化),每次更改都会中断,您需要投入的维护能量越多,或者软件的错误就越多。 最后,这是一个成本问题。
从类的用户隐藏类的内部以避免以后更改破坏代码的可能性通常称为封装或信息隐藏 。
除了public和private之外的两个选项是package(没有修饰符)和protected。 也可以从同一个包的类中访问包可访问的方法。 我不记得以任何有用的方式使用该选项。 可以从inheritance相关类的类访问受保护的方法。 这通常用于为基类的已定义API创建具有具体行为的类。 例如,你可以通过扩展AbstractList来实现一个新的List类,你只需要实现get和size(以及一个可修改列表的set-method)。 List的API公开的其他方法在基类中定义,如果需要,调用其他三种方法。
私有方法只能在类中调用。 您可以在程序中的任何位置调用类的公共方法。 没有访问修饰符的方法意味着具有包可见性范围(它被称为默认值 ),因此您可以在包中定义类的任何位置调用它。
见http://en.wikipedia.org/wiki/Object_oriented_programming#Encapsulation
公共,受保护和私有修饰符控制其他代码可以看到这些方法(或字段)的内容。 它是关于控制你正在暴露的界面。
通常有用的是:
公共修饰符:任何其他人都可以看到你的方法。
私有修饰符:除了您的类之外没有其他代码,任何内部类都可以看到您的方法。
例如,如果您想确保只创建了一个类的单个实例( 单例模式 ),这些将非常有用。 您可以将构造函数设为私有,创建单个实例,并将store存储为名为instance的私有成员,并提供如下公共方法:
public static MyObject getInstance() { return instance; }
所以你可以保证只有每一个实例。
更新 – 请求的另一个示例。
另一个例子可能是你有一个复杂的公共方法,你想把它分解成更简单的部分。 您可以将其分解为更简单的方法,每个方法都可以完成部分工作,但您不希望其他代码调用这些部分方法,因为它们不能自行工作 – 因此您可以将较小的方法设为私有,从而确保他们不能在课外打电话。
主要原因是封装:不允许访问内部对象状态。
对于初学者,我会尽可能地开始限制访问。 从private
开始。 如果您碰巧需要来自其他地方的构造函数,方法或字段,但由于限制而无法访问它,那么接下来的步骤就是问自己:
- 如果它是一种方法,你真的需要访问它吗? 它是否会改变类/实例的行为? 你不应该让那个class级做这项工作吗? 当前的类(需要该字段或方法)是否应该更加严格到该类?
- 如果是一个字段,您需要获取或设置其值吗? 你不应该添加一个确切的方法吗?
点1避免错误耦合,点2改善封装。 一旦你考虑了上述内容并得出结论,确实需要较少的限制,那么将其设置为一步或更多步。