我看到了一些有关这个主题的StackOverflow讨论,但我没有看到什么帮助我理解以下问题的内容:
我来自C ++背景,并且最近开始学习Java。 在C ++中,当使用 protected 时,只有子类可以访问成员(Java中的字段的类比)。
在C ++中,还有“friend”类,可以访问给定“友谊”的类的私有/受保护成员。这与Java中的“package”字段修饰符(默认字段修饰符)有点相似,不同之处在于,在C ++中,友谊赋予对所有私有成员的访问权限,而在Java中,来自同一包中的类的访问权限是特定于类字段的。
我无法理解的是,假设我想只授予子类访问权限,那么这是我可以通过在不“授予”友情的类中声明受保护的成员来完成的。
但在Java中,我不知道如何做到这一点,因为使用“protected”字段修饰符-我还向该包中的所有类授权访问。 我发现唯一的方法是声明受保护的字段并将类隔离在其包中。
从这里,我的结论是将类分组到一个包中必须基于类之间的“友谊”。 这确实是包组合中的主要考虑因素吗? 还有一件事我不明白, 在Java中,假设类A中有两个字段:b,c。 我想给B访问权限b,但不适用于c, 我想给C访问c的权限,但不适用于b。 并且对于“World”,我希望b,c被隐藏。 怎么做呢? 我猜B,C应该都在A的同一个包中。 但是通过使用 package 修饰符声明b,c,我让B,C都可以访问b和c。 在Java中是否有一种方法可以做到这一点?
我来自C ++背景,并且最近开始学习Java。 在C ++中,当使用 protected 时,只有子类可以访问成员(Java中的字段的类比)。
在C ++中,还有“friend”类,可以访问给定“友谊”的类的私有/受保护成员。这与Java中的“package”字段修饰符(默认字段修饰符)有点相似,不同之处在于,在C ++中,友谊赋予对所有私有成员的访问权限,而在Java中,来自同一包中的类的访问权限是特定于类字段的。
我无法理解的是,假设我想只授予子类访问权限,那么这是我可以通过在不“授予”友情的类中声明受保护的成员来完成的。
但在Java中,我不知道如何做到这一点,因为使用“protected”字段修饰符-我还向该包中的所有类授权访问。 我发现唯一的方法是声明受保护的字段并将类隔离在其包中。
从这里,我的结论是将类分组到一个包中必须基于类之间的“友谊”。 这确实是包组合中的主要考虑因素吗? 还有一件事我不明白, 在Java中,假设类A中有两个字段:b,c。 我想给B访问权限b,但不适用于c, 我想给C访问c的权限,但不适用于b。 并且对于“World”,我希望b,c被隐藏。 怎么做呢? 我猜B,C应该都在A的同一个包中。 但是通过使用 package 修饰符声明b,c,我让B,C都可以访问b和c。 在Java中是否有一种方法可以做到这一点?