我正在做一个家庭作业(一个项目),其中一个标准是我必须以明显改善代码整体质量或功能的方式利用多态性.
我做了一个哈希表,看起来像这样:
public class HashTable<E extends Hashable>{
...
}
Run Code Online (Sandbox Code Playgroud)
Hashable是我制作的具有hash()函数的接口.
我知道使用泛型这种方式可以提高我的代码质量,因为现在HashTable可以使用我想要的任何类型(例如,而不仅仅是int或Strings).但我不确定它是否表现出多态性.
我认为确实如此,因为E可以是任何实现Hashable的类型.换句话说,HashTable是一个可以(实际上)使用任何类型的类.
但我不太确定 - 这是多态吗?也许我可以得到一些关于究竟多态性是什么的澄清?
提前致谢!
编辑:收到下面的答案后(见:收到的第一个答案),我读了维基百科的文章,并发现了这个:
"在面向对象的编程社区中,使用参数多态的编程通常称为泛型编程." (重点补充)
所以我有一个Tree<E>类,其中E是由树保存和组织的数据类型.我想像这样迭代树,或者以类似的方式迭代:
1. Tree<String> tree=new Tree<String>();
2. ...add some nodes...
3. for (String s : tree)
4. System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
但它在第3行给出了错误.
Incompatible types
required: java.lang.String
found: java.lang.Object
Run Code Online (Sandbox Code Playgroud)
然而,以下工作正常并且如预期的那样,执行树的正确有序遍历并按原样打印每个节点:
for (TreeIterator<String> i = tree.iterator(); i.hasNext(); )
System.out.println(i.next());
Run Code Online (Sandbox Code Playgroud)
我的Tree类看起来像这样:
public class Tree<E> implements java.lang.Iterable{
...
public TreeIterator<E> iterator(){
return new TreeIterator<E>(root);//return an iterator for the root node
}
....
}
Run Code Online (Sandbox Code Playgroud)
我的TreeIterator类看起来像这样:
public class TreeIterator<E> implements java.util.Iterator<E>{
public E next(){
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是我想让for (String s : tree)循环正常工作 - …