Jak mohu implementovat polymorfní strom binárního vyhledávání (který využívá EmptyTree a NonEmptyTree) bez použití kontroly downcasting nebo třídy?
java polymorfní binární vyhledávací strom
Vytvoření společného rozhraní, jako je například:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Pak poskytuje tříd, které implementují společné rozhraní:
class EmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K key) {
// ...
}
}
class NonEmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K searchKey) {
// ...
}
}
Vaše implementace pro EmptyTree bude vždy indikovat selhání při hledání položky (ať už tím, že vrátí null nebo vyvoláním výjimky), zatímco vaše implementace NonEmptyTree se buď vrátit sám (v případě, že za předpokladu, vyhledávání klíčových zápasů), nebo přenést na levé straně nebo pravá podstromy. Vzhledem k tomu, doleva nebo doprava Podstrom bude vždy existovat (to bude buď být NonEmptyTree nebo EmptyTree), třída „NonEmptyTree“ lze jednoduše odkazuje na své děti přes společné rozhraní a spoléhat na to, že typ runtime udělá správnou věc (není tedy nutné provádět lití nebo typ kontrolu dětí při provádění algoritmu).
Jediné místo, kde je třeba znát typ runtime je, když si postavit děti.













