java中可以有几个公共类?,java – 为什么我可以在非公开类中有一个公共成员?...

由于你的问题是大约

members,我将讨论这两个领域和方法(非静态;

Anthony Accioly’s answer涉及另一个很好的用例,也包括静态字段)。

虽然在许多情况下,这只是语言语法的一个含糊不清的结果(特别是非公开课的公共领域,如您的示例代码片段),有非常好的理由需要能够在非公开课中使用公共方法,公共课

扩展到Mik378’s的答案,考虑,例如以下(设计的例子):

import ...;

class BleebleAscendingComparator implements Comparator {

@Override public int compare (Bleeble o1, Bleeble o2) { ... }

}

class BleebleDescendingComparator implements Comparator {

@Override public int compare (Bleeble o1, Bleeble o2) { ... }

}

public class BleebleView {

public enum SortMode { ASC, DESC };

public Comparator getDisplayOrderComparator (SortMode mode) {

if (mode == SortMode.ASC)

return new BleebleAscendingComparator();

else

return new BleebleDescendingComparator();

}

}

您不能在该上下文之外直接实例化那些Comparator实现,但是它们必须覆盖Comparator的公共方法,并且它们的功能可以通过Comparator接口访问。

这种相同的推理适用于例如私人或受保护的内部类。如果您无法将方法声明为public,则您无法覆盖它们继承的接口的公共方法或扩展的类。

实际示例:

>每次您在匿名内部类中覆盖公共方法(例如每次覆盖匿名ActionListener中的public void actionPerformed)时,都可以使用此方法。

>考虑您希望存储在HashMap中的任何非公开类。您将覆盖该非公共类中的public equals()和hashCode(),并且HashMap的实现可以访问它们,而不管该类是否为非公开的事实。

>经常被覆盖的public toString()是潜在非公开类的公共成员的另一个常见示例。

>一个更复杂的例子是在java.sql.DriverManager中使用java.sql.Driver(一般来说,工厂型设计大量使用这个概念) – 一个SQL驱动程序实现可能不会使实现类公开(例如,Oracle驱动程序产生非公共连接对象)。>更多…如果你留意这个例子,你会惊讶它是多么的真实!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值