访问修饰符的作用是什么?

3

在编程语言中有必要使用访问修饰符吗?如果我们将所有成员和方法都设为私有,那么输出会是什么?

13个回答

7

查看: 封装 (维基百科)

当然,你可以将所有成员和方法声明为私有的,但那样你得到的就是一个几乎无用的类,因为你无法从另一个类中访问任何成员。


4

私有(Private)用于封装(面向对象编程),以隐藏实现细节。 公共(Public)声明的方法提供类的接口。

如果您将所有内容都声明为私有,就无法使用其他类中的方法。 这将使具有此类方法的类变得相当无用。


2
你需要访问修饰符来控制方法/成员的可访问性。道德是你应该尽可能将可访问性限制为私有,但仍然不能使所有内容都为私有。
假设你有一个实用程序类,它为所有类执行有用的操作(例如:日志记录)。在这种情况下,所有类都应该“看到”实用程序类及其成员。当然,你不能在这里使一切都为私有。这只是数百个例子中的一个。

2
访问修饰符用于控制字段和方法的可见性。通常,我们有充分的理由不允许其他类的对象使用方法或字段。
如果您刚开始编写Java代码,并将所有代码保存在一个类中,则最终可能不需要不同的访问修饰符(除了必须是public的主方法)。一旦您实现了多个类(即一旦您的设计变为面向对象),访问修饰符就开始变得重要起来。
这里有一个指向官方Java教程中相应文章的链接。

2

2
访问修饰符用于封装:它们允许您将代码组织成包和类,并仅公开“官方”公共接口以供外部使用,同时隐藏实现细节(这是您想要的,以便稍后更改而不告诉任何人)。
特别是在将代码发布为其他程序员使用的库时,这尤其(唯一?)重要。即使代码仅在自己的程序中使用,将大型程序结构化为几个包也会有所帮助。
除非您的程序只包含一个类,否则使所有内容都私有化没有意义。但默认情况下可以考虑这样做:在认为其他类需要调用它之前,将该方法设置为私有。
Java中的默认修饰符(如果未指定)是包保护。这允许从自己相关的代码(即同一包中的代码)访问该方法或字段,同时将其隐藏在其他人面前。这也是一个合理的默认值或从私有升级的自然路径:在包外的代码需要调用它之前,将该方法设置为包保护。
可见性层次有受保护的(子类可以看到),以及公共的(每个人都可以看到)。在将某些内容设置为公共或受保护之前,请仔细思考界面,因为稍后更改它变得困难。

2
我同意,private 作为成员字段的规则是很好的。然而,private 修饰符禁止子类访问字段和方法。如果所有的方法和字段都是 private 的,那么子类除了类型外将与其父类没有共同之处。
如果所有方法都不可用,一个对象要对另一个对象有用也会变得困难。如果所有方法(包括构造函数)都是私有的,甚至实例化一个 Object 都会很困难。
更好的讨论问题应该是:在 privatepublic 之外,为什么需要 protecteddefault 访问修饰符。

如果我们只有私有和公共,我们无法在包中构建代码结构:默认修饰符隐藏了来自包外的访问。不过,我愿意讨论是否需要“受保护”的修饰符。如果您经常使用子类化,那么它非常方便。 - Thilo
然而,在Java中,private关键字限制了子类对字段和方法的访问权限。我建议您重新表述一下这个语句,因为它目前的表述比较混乱。 - user207421

1

这是关于您的类方法或属性的可访问性问题,我画了一张表格,试图使其易于理解。

+----------------------+----------------+-----------------+----------------------+
|Access Modifiers      | Same Package   |  Subclass       |  Other packages      |
|----------------------|----------------|-----------------|----------------------|
|public                |      Y         |       Y         |            Y         |
|                      |                |                 |                      |
|protected             |      Y         |       Y         |            N         |
|                      |                |                 |                      |
|no access modifier    |      Y         |       N         |            N         |
|                      |                |                 |                      |
|private               |      Y         |       N         |            N         |
|                      |                |                 |                      |
+----------------------+----------------+-----------------+----------------------+

1

您可以使用默认访问权限,使类在包中可用。如果您将其设置为private,则没有人可以使用它。


0

所有的方法和字段只能在类内部访问,即使您继承或使用该类的对象访问也不能在类外部访问。

Java包含四种访问修饰符,

Public
Private
Protected
Default

Java 有五个非访问修饰符

static
final
abstract
syncronised
volatile

来源:Java修饰符教程数据


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接