2017-09-08 14 views
0

でオブジェクトを作成しているときにLinkedListメソッドにアクセスできないList obj = new LinkedList()LinkedListメソッドにアクセスできないのはなぜですか?List参照型オブジェクト

+6

であるため、 'LinkedList'はスーパータイプ' List'に隠されています。 – matoni

+4

特定の 'LinkedList'メソッドが必要な場合は、' LinkedList obj = new LinkedList <>() 'を使用してください。 – aUserHimself

答えて

2

Listです。 LinkedListを「格納」しましたが、Listと扱っています。あなたが使用して、リストの種類を知っているLinkedList

1

あなたがjava.util.Listについて話しているのであれば、それはインタフェースですが、LinkedListはListを実装するクラスです。あなたが唯一のインターフェイスのメソッドを使用することができますThatsなぜ

LikedList
List

。あなたが持っているもの

List obj = new LinkedList()

0

原因コンパイラdoesntのように扱うことができ

LinkedList obj = new LinkedList()

、実行時型識別を持つように - :で一方

、インターフェイスメソッドのみを使用できます。リストはインターフェイス

0

あなたのコードはList(インターフェイス)型の変数を作成します。

obj変数を参照する他のコードでは、obj変数を使用して参照されるすべてのオブジェクトがListインターフェイスを実装するとしか想定できません。

objが参照するオブジェクトがリンクリストであることをアサートするには、objをLinkedListにキャストする必要があります。これは、インターフェイス実装者がリンクリストであることを前提にしています。

一般的に、インターフェイスなどの抽象概念を使ってプログラムを作成するのが得意ですが、生の型によって提供されるメソッドにアクセスする必要がある場合は、生の型(この場合はLinkedList)への参照を使用するか、必要なメソッドを提供するList以外のインタフェース

LinkedList<String> myLinkedList = new LinkedList<>(); 

public void expectsList(List<String> maybeLinkedList){ 

    maybeLinkedList.listInterfaceMethod(); // works ok 

    LinkedList linkedList = (LinkedList<String>) maybeLinkedList; // CAST may fail if obj is not a linked list 

    linkedList.linkedListMethod(); // If cast worked, this works 
} 

public void expectsLinkedList(LinkedList<String> aLinkedList){ 

    aList.listInterfaceMethod(); // Works because linked list honors the List interface 

    List<String> list = aLinkedList; // also works because Linked list 'is a' kind of List 

    list.listInterfaceMethod(); // works ok 

    linkedList.linkedListMethod(); // We know the input object is a linked list 

} 

キャストは変更するタイプを説明するためのものであり、この場合は問題を解決するためにキャストする必要はありません。

関連する問題