正如这里简洁描述的那样,在Java中覆盖私有方法是无效的,因为父类的私有方法是"自动最终的,并且从派生类中隐藏".我的问题主要是学术问题.
如何不允许父级的私有方法被"覆盖"(即,在子类中使用相同的签名独立实现),是不是违反封装?根据封装原则,子类无法访问或继承父级的私有方法.它是隐藏的.
那么,为什么要限制子类使用相同的名称/签名实现自己的方法呢?有没有一个很好的理论基础,或者这只是某种实用的解决方案?其他语言(C++或C#)对此有不同的规定吗?
我试图理解下面使用lambda表达式.此代码取自Josh Smith出色的MVVM演示代码(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090055).
方法调用如下:
AllCustomersViewModel workspace =
this.Workspaces.FirstOrDefault(vm => vm is AllCustomersViewModel)
as AllCustomersViewModel;
Run Code Online (Sandbox Code Playgroud)
如此处所使用的,FirstOrDefault
具有以下定义,由Visual Studio 2010标识:
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
Run Code Online (Sandbox Code Playgroud)
我不清楚
怎么vm
得到它的类型?它没有在对象实例的其他地方定义.
如何FirstOrDefault(vm => vm is AllCustomersViewModel)
满足source
参数要求FirstOrDefault
?这是某种暗示吗?
我一直在尝试使用这些资源来解析这个问题: