这是什么意思,如果你让一个类的默认访问,并标记该类中包含的方法公开?换句话说,如果封闭类无法公开访问,怎么能公开访问方法?默认访问类中的公共访问方法..有什么意义?
回答
在某些情况下可能需要公开方法,例如,当您的具有默认访问权限的类实现公共接口时。
当您的API根据接口定义并且您的默认访问类实现了其中一个公共接口时,这非常有用。您的API的用户可以通过工厂方法实例化您的默认访问类。
你指出了一件非常有趣的事情。我没有想到这一点。谢谢。 – user3516726 2014-09-21 14:56:01
还有一个问题。这是唯一的情况下,在默认访问类中声明公共方法是有意义的吗? – user3516726 2014-09-21 15:14:27
@ user3516726这是最常见的情况,也是唯一严格要求的情况(我计算在这个类别中实现公共抽象类和非抽象类)。其他情况并不严格要求公开的方法,但是您可以选择继续使用,以向在您之后维护您的代码的人强调这些方法旨在供任何有权访问此类的人使用。 – dasblinkenlight 2014-09-21 17:07:45
public
当您重写某些公开方法或实现interface
s时经常需要。
我们来看一下Object#equals方法的一个简单例子。
尽管您的主类有默认范围,但您不能在覆盖可见性的同时覆盖此方法。 所以你需要:public void equals(.......
你的意思是这样的:
package p1;
class C1 {
public void publicMethod() {}
}
在另一个包:
package p2;
import p1.C1; // not allowed
public class C2 {
C1 c1; // not allowed
void test() {
c1.publicMethod(); // not allowed
}
}
在继承的情况下,publicMethod
可用于:
package p1;
public class C2 extends C1 {}
现在publicMethod
能访问:
package p2;
import p1.C2; // C2 is public, ok !
public class C3 {
C2 c2; // C2 is public, ok !
void test() {
c2.publicMethod(); // C2 is public, use publicMethod of C1 !
}
}
因此,减少一个class
可见性对于不应该在包外部直接使用的类型的abtract类是有用的。
你说'如果继承可以使用publicMethod'。但是如果这个类被声明为默认访问,那么在它之外的任何方法(甚至是公共的)都可以在包之外访问。事实上,在包之外,你甚至不能用默认访问来继承一个类。 – user3516726 2014-09-21 15:09:51
p1.C2(public)扩展p1.C1(默认)。 p1.C2实例可以在任何包中访问p1.C1的公共方法。试试看吧。 – 2014-09-21 15:41:10
我觉得有一些误解。我说的是,默认访问方法只能从包内部调用,而不能在外部调用。如果你有一个'受保护的'访问方法,那么它甚至可以从包的外部被子类调用。 – user3516726 2014-09-21 16:26:04
- 1. 默认(包)访问级别的类中方法的默认(包)和公共访问级别是否有区别?
- 2. 默认级别访问的类内公共方法的用途是什么?
- 3. scala中的默认公共访问
- 4. 无法访问默认包中的类
- 5. 访问公共方法的活动
- 6. 默认类的可访问
- 7. 为什么有多个公共访问说明符standard_layout的类?
- 8. 无法使用公共IP访问nginx默认页面
- 9. 无法访问基类中的公共方法
- 10. 对包 - 私有作品的Java默认类访问如公开
- 11. 无法从片段内部访问公共类的方法
- 12. JavaScript中访问其他公共方法内(同一目标)的公共方法
- 13. 为什么嵌套的公共类不如父级可访问?
- 14. 为什么我不能访问其他类的公共变量?
- 15. 提供公共访问默认插件设置?
- 16. 访问另一个类的公共方法
- 17. 为什么我无法访问ClientBase的这个公共属性?
- 18. 为什么要将基类中的受保护访问更改为派生类中的公共访问权限?
- 19. javascript私有成员无法通过公共方法访问
- 20. 无法访问公共类中的公共类的公共类(全部在单独的jar中)
- 21. 访问没有访问令牌的公共图片?
- 22. JavaScript的OOP私有方法访问公共财产
- 23. 什么是本地类成员的默认访问修饰符?
- 24. 我无法访问main中的子类中的公共变量?
- 25. 从用户控制/类/页访问主页面公共方法
- 26. Rails的公共/私有访问
- 27. 为什么无法通过公共IP访问服务器
- 28. 为什么我无法访问公共个人资料信息?
- 29. 访问类方法
- 30. 限制访问公共API
也许通过[抽象工厂模式](http://en.wikipedia.org/wiki/Abstract_factory_pattern)或[生成器模式](http://en.wikipedia.org/wiki/Builder_pattern)用于创建实例。 – 2014-09-21 14:25:01
低质量问题:[docs](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html) – afzalex 2014-09-21 14:26:16
@afzalex,请不要像'低质量问题'这样的无理评论回答这个问题..看看其他帖子,人们实际上给出了有意义的答案。 – user3516726 2014-09-21 15:13:04