相关疑难解决方法(0)

接口与抽象类(通用OO)

我最近接受过两次电话采访,其中我被问及接口和抽象类之间的区别.我已经解释了他能想到的每一个方面,但似乎他们在等我提一些具体的东西,我不知道它是什么.

根据我的经验,我认为以下是正确的.如果我错过了重点,请告诉我.

接口:

在接口中声明的每个单独的方法都必须在子类中实现.接口中只能存在事件,代理,属性(C#)和方法.一个类可以实现多个接口.

抽象类:

只有抽象方法必须由子类实现.Abstract类可以有实现的常规方法.Abstract类还可以在Events,Delegates,Properties和Methods旁边有类变量.由于C#中不存在多重继承,因此类只能实现一个抽象类.

  1. 毕竟,面试官想出了一个问题"如果你有一个只有抽象方法的抽象类怎么办?那么它与界面会有什么不同?" 我不知道答案,但我认为这是上面提到的继承权吗?

  2. 另一位采访者问我,如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同?我坚持认为你不能在界面中有一个公共变量.我不知道他想听到什么,但他也不满意.

另见:

oop abstract-class interface

1372
推荐指数
30
解决办法
69万
查看次数

为什么Java Map不扩展Collection?

我对这Map<?,?>不是一个事实感到惊讶Collection<?>.

我认为如果宣布这样的话会有很多意义:

public interface Map<K,V> extends Collection<Map.Entry<K,V>>
Run Code Online (Sandbox Code Playgroud)

毕竟,一个Map<K,V>是集合Map.Entry<K,V>,不是吗?

那么为什么没有这样实现呢?


感谢Cletus提供了最权威的答案,但我仍然想知道为什么,如果您已经可以查看Map<K,V>as Set<Map.Entries<K,V>>(via entrySet()),它不仅仅是扩展该界面.

如果a Map是a Collection,那么元素是什么?唯一合理的答案是"键值对"

确切地说,interface Map<K,V> extends Set<Map.Entry<K,V>>会很棒!

但这提供了非常有限(并且不是特别有用)的Map抽象.

但如果是这种情况那么为什么entrySet界面指定?它必须以某种方式有用(我认为这个位置很容易争论!).

您不能询问给定键映射到的值,也不能删除给定键的条目而不知道它映射到的值.

我不是说这就是它的全部内容Map!它可以而且应该保留所有其他方法(除了entrySet现在多余的方法)!

java oop collections

142
推荐指数
3
解决办法
4万
查看次数

如何覆盖java枚举中的(final)equals方法?

我在覆盖Enum中的equals方法时遇到问题,使其与其他类兼容.Enum实现了一个接口,其思路是可以测试此接口的所有实现是否相等,无论其类型如何.例如:

public interface Group {
    public Point[] getCoordinates();
}

public enum BasicGroups implements Group {
    a,b,c; // simplified, they actually have constructors
    // + fields and methods
}

public class OtherGroup implements Group {
    // fields and methods
}
Run Code Online (Sandbox Code Playgroud)

如果a BasicGroup和a OtherGroup具有相同的坐标(按任意顺序),则equals方法应返回true.

执行时没问题,myOtherGroup.equals(BasicGroup.a)但由于Enums中的equals方法是最终的,我无法覆盖它们.

有办法解决这个问题吗?就像在另一个BasicGroup上测试时一样,使用默认的equals方法(引用相等),并且在测试其他类时使用我自己的实现.我该如何确保java不使用错误的BasicGroup.a.equals(myOtherGroup)

java enums overriding final equals

14
推荐指数
2
解决办法
1万
查看次数

Guava ForwardingList用法示例

我正在寻找解释Guava ForwardingList类的示例代码.基本上我正在实现一个自定义的ArrayList类,它将用于解决我之前提出的SO问题中提到的这个要求.我以前从未使用过谷歌收藏.但是通过查看ForwardingListJavaDoc,我想我可以通过子类化ForwardingList来实现我的自定义类.

java collections guava

9
推荐指数
1
解决办法
4931
查看次数

标签 统计

java ×3

collections ×2

oop ×2

abstract-class ×1

enums ×1

equals ×1

final ×1

guava ×1

interface ×1

overriding ×1