Como "extender" interfaces?

Olá, estou tentando acrescentar alguns métodos a interface NodeList para facilitar o processamento dos dados. O problema é que, como dito, NodeList é um interface, e portanto, usar “class meuNodeList extends NodeList” não funciona. Usando “abstrat class meuNodeList implements NodeList” o programa compila mas não roda:

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerc es.internal.dom.DeferredElementImpl

Alguem sabe o que fazer? Eu terei que implementar novamente os métodos da interface NodeList?

[quote=rissato]Olá, estou tentando acrescentar alguns métodos a interface NodeList para facilitar o processamento dos dados. O problema é que, como dito, NodeList é um interface, e portanto, usar “class meuNodeList extends NodeList” não funciona. Usando “abstrat class meuNodeList implements NodeList” o programa compila mas não roda:

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerc es.internal.dom.DeferredElementImpl

Alguem sabe o que fazer? Eu terei que implementar novamente os métodos da interface NodeList?[/quote]

a) NodeList é uma interface com só 2 métodos, qual é a dificuldade de implementá-los?

b) Não é o caso de NodeList, mas muitas vezes, para uma interface complicada, há uma implementação padrão ou abstract (onde você tem de completar com alguma coisinha). Por exemplo, no caso de javax.swing.TableMode, existe uma implementação padrão - DefaultTableModel - e outra abstract - AbstractTableModel.

agora eu estou tentando implementar os métodos item() e getLength(). O problema é que ao executar o programa esse erro que eu postei continua aparecendo

olhe o stack trace da excecao e va na linha apontada e deve haver um cast que nao completa corretamente (muito provavelmente nao tem a ver com a interface)

cara…
interfaces não possuem implementações !!

e qdo vc diz que sua classe “implementa” uma interface, o que vc esta definindo é que sua classe terá tdos os metodos daquela interface, como um contrato.

Ae cabe a vc implementar os metodos…

[quote]
The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.[/quote]http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/NodeList.html

Esta classe por exemplo
http://xerces.apache.org/xerces2-j/javadocs/xerces2/org/apache/xerces/dom/NodeImpl.html

implementa a interafce NodeList, impplementando seus dois metodos !!

Entao ou vc implementa os dois metodos ou estende um classe que ja implemente estes metodos !!

Espero naum ter te confundido + !!! :slight_smile:

tem um cast sim: dados = (meuNodeList)elementos.getChildNodes();

o getChildNodes retorna um NodeList… e o meuNodeList extende NodeList. Isso não deveria funcionar?

Não entendi anda, você quer estender ou implementar uma interface?

Para estender uma faça:

interface MinhaInterface extends NodeList{
...
}

[quote=pcalcado]Não entendi anda, você quer estender ou implementar uma interface?

Para estender uma faça:

interface MinhaInterface extends NodeList{ ... } [/quote]
eu quero adicionar alguns métodos a interface NodeList.

Então:

interface MinhaInterface extends NodeList{
void meuNovoMetodo();
}

[quote=pcalcado]Então:

interface MinhaInterface extends NodeList{ void meuNovoMetodo(); } [/quote]

já fiz… agora tem 2 coisinhas de iniciante:

1 - pra implementar os meus métodos, eu vou ter que “re-implementar” os métodos getLength() e item() da interface NodeList, e como iniciante, eu não faço idéia do que tem dentro deles;

2 - Esse resultado de um cast:

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerc es.internal.dom.DeferredElementImpl

Consegui achar uma implementação para a interface NodeList:

[quote]class DNL implements NodeList {
Vector vect = null;
DNL(Vector v) {
vect = v;
}
public int getLength() {
return vect.size();
}
public Node item(int i) {
return (Node)vect.elementAt(i);
}
public String toString() {
return vect.toString();
}

}[/quote]queria agora que alguém me explicasse como funciona a MÁGICA através da qual o vetor vect é preenchido com os dados que são gravados em uma instância da DNL. Confesso que desde quando eu comecei com Java, essa foi a primeira vez que eu “boiei” completamente. :shock:

Rissato, como todos já disseram, interfaces não implementam métodos! Apenas os define. Ou seja, dentro de uma interface, o método não possui código algum.

Quanto à classe DNL que você colocou, se você prestar um pouquinho de atenção, vai ver que o construtor recebe um parâmetro, e que esse parâmetro é colocado na variável vect.

Portanto, não há mágica alguma! :wink: