Java: почему при создании объекта интерфейс находится не справа? - PullRequest
0 голосов
/ 04 марта 2012
java.util.Queue<TreeNode> queue = new java.util.LinkedList<TreeNode>();

LinkedList реализует очередь. Разве Очередь не должна быть справа от вышеприведенного оператора, а LinkedList слева?

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

В примере объявляется queue ссылкой на объект, имеющий тип Queue<TreeNode>, но переменная должна ссылаться на экземпляр конкретной реализации этого интерфейса, LinkedList<TreeNode>. При кодировании интерфейса вы соглашаетесь использовать только методы Queue. Это позволяет изменить реализацию, если требуется, без изменения способа использования queue.

1 голос
/ 04 марта 2012

В Java вы можете присвоить значение переменной того же типа или более общего типа.В вашем примере new LinkedList<TreeNode>() является значением.Поскольку LinkedList реализует Queue, он более специфичен, чем Queue.то есть A LinkedList является Queue.

Например, все три из них действительны

Object o = new LinkedList<TreeNode>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
LinkedList<TreeNode> list = new LinkedList<TreeNode>();

Но вы не можете написать ни одно из этихпотому что это неправильное назначение.

LinkedList<TreeNode> o = new Object();
LinkedList<TreeNode> queue = new Queue<TreeNode>();

PS второй в этом примере также недопустим, потому что Queue является интерфейсом, и вы не можете создать экземпляр (new) интерфейса, потому что это не конкретныйтип

...