2010-12-29 31 views
8

¿Puedo llamar a un método dentro de una interfaz sin implementar la interfaz en mi clase?¿Puedo llamar a un método que está dentro de una interfaz sin implementar la interfaz?

package; 

import Contact; 

public interface IPerson{ 

    public void savePerson(Contact contact); 

} 

Ahora alguna clase aquí ...

public class HulkHogan { 

//Calling the method savePerson here 
//I dont want to implement the Interface in all. 

} 
+2

en serio. Sé que los principiantes tienen algunos problemas, pero ni siquiera intentas dar sentido a tus preguntas. – Bozho

+2

Llama a métodos en objetos. No en las interfaces. ¿Dónde está tu objeto? ¿Cuál es su clase? – Bozho

+0

¿Cómo llamará al método sin crear un objeto de referencia? – niksvp

Respuesta

6

Estáticamente, puede declarar que se llame. No necesariamente tiene que implementar la interfaz dentro de la clase de llamada. Por ejemplo:

public class HulkHogan { 
    private IPerson person; 

    public HulkHogan(IPerson person){ 
    this.person = person; 
    } 

    public void doSomething(Contant contact){ 
    //call your method here 
    person.savePerson(contact); 
    } 
} 

Pero con el fin de ejecutarlo, se hará necesidad de implementar en algún lugar, porque la interfaz simplemente describe cómo se comporta algo, pero no proporciona el comportamiento real (es decir, no ponerlo en práctica).

2

Sin No se puede llamar así, usted tendrá que proporcionar su ejecución al menos

Además de llamar al método necesitará un objeto. no se puede crear una instancia de la interfaz sin su implementación provista

4

No se puede porque el método no contiene una definición (cuerpo del método). El propósito de una interfaz es implementarlo en alguna parte para que tenga una implementación real de este método.

1

A menos que tenga implement interfaz o un miembro miembro de una clase que implemente la interfaz, no puede usar el método savePerson, ya que por definición todavía no tiene implementación.

1

Habría que llamarlo en un objeto que es una instancia de la interfaz, así que o HulkHogan tendría que aplicar IPerson o una instancia de algo que implementa IPerson tendría que ser suministrado a (o una instancia dentro, aunque eso no es preferido) HulkHogan.

Más al punto (basado también en sus preguntas anteriores), ¿qué espera lograr llamando a un método que no tiene implementación?

2

La interfaz es solo una definición de métodos sin implementación. Si no está implementando los métodos, ¿qué harán cuando los llame?

Por otro lado, una interfaz no está necesariamente implementada por la clase de llamada. Entonces, en su caso, HulkHogan puede llamar al método savePerson() de otro objeto, sin implementarlo por sí mismo. Pero alguna clase tiene que implementarlo en alguna parte para que haga algo.

5

Se puede de esta manera:

Person p = new IPerson{ 

    public void savePerson(Contact contact) { 
     // some code 
    } 

} 

Ahora llamar savePerson en la pág. Está implementando IPerson sin crear una clase separada.

+1

runtime definition .... – Vishwanath

+0

Objeción - hay una clase anónima en este fragmento de código. – Trejkaz

1

El objetivo de una interfaz es ordenar un contrato específico y conocido para un tipo conocido de objeto. Por ejemplo, por tradición, todas las pilas tienen push(), pop() y peek(). Entonces al escribir una interfaz, estás escribiendo un contrato expresamente que cualquiera que escriba una pila debería seguir.

Dicho de otra manera, es una plantilla que dicta que cualquier clase que se llame a sí misma una Pila debe implementar métodos llamados push(), pop() y peek() como mi ejemplo aquí discute.

public interface StackInterface { 
    public void push(int x); 
    public int pop(); 
    public void peek(); 
} 

public class myStack implements StackInterface{ 

} 

Es una técnica orientada a objetos. En este punto, no obtendrá una compilación porque al menos no ha implementado métodos para los métodos de interfaz. Tendrá que escribir métodos que coincidan con las firmas de la Interfaz antes de poder usar completamente la interfaz.

0
public class HulkHogan { 

private IPerson person; 

public void setContactM(IPerson person) { 
    this.person= person; 
} 

public void doSomething(Contact contact) { 
    person.savePerson(contact); 
    } 

} 

Espero que el método savePerson tenga alguna definición en algún lugar de otra clase que lo implemente. De esta manera puede llamar al método dentro de su interfaz.

+0

gracias hermano por apoyarme – theJava

3

Sin usted no puede ... bcoz todos los métodos de la interfaz de la clase son abstract..and no te puedes usarlos sin la implementación de la clase ...

1

cuando dice que está implementando una interfaz para una clase, en realidad significa que está cumpliendo un contrato (o una disciplina) que se define en la interfaz, es decir, dará la definición del método en la interfaz, así que simplemente sienta que esa interfaz es un contenedor que contiene una regla,

Usted dijo que desea llamar al método en la interfaz: ese no es un método en sí mismo que sea solo una regla, entonces ¿qué sentido tiene llamar a un método que no tiene cuerpo (en realidad no es un método en sí mismo)

... disfrutan

1

Se puede crear un proxy que no hace nada para burlarse a cabo las llamadas a la interfaz. Sin embargo, esto efectivamente crea una implementación de forma dinámica. No puede evitar proporcionar una implementación de algún tipo.

0

No puede llamar al método mientras no tenga un cuerpo implementado. La clase implementadora le dará el cuerpo que necesita. En Java 8, puede implementar el cuerpo del método dentro de la interfaz y usar el modificador de acceso estático para él. En este caso, solo tiene que importar la interfaz en su clase actual (en caso de que esté en un paquete diferente) y luego puede llamar al método directamente.

Cuestiones relacionadas