non implementare tutti i metodi di interfaccia. È ansible?

C’è un modo per NON implementare tutti i metodi di un’interfaccia in una class ereditaria?

L’unico modo per aggirare questo è dichiarare la tua class come abstract e lasciarla a una sottoclass per implementare i metodi mancanti. Ma alla fine, qualcuno nella catena deve implementarlo per soddisfare il contratto di interfaccia. Se davvero non hai bisogno di un metodo particolare, puoi implementarlo e quindi return o lanciare una varietà di NotImplementedException , a seconda di quale sia più appropriato nel tuo caso.

L’interfaccia potrebbe anche specificare alcuni metodi come “predefiniti” e fornire l’implementazione del metodo corrispondente all’interno della definizione di interfaccia ( https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html ). Questi metodi “predefiniti” non devono essere menzionati durante l’implementazione dell’interfaccia.

Il punto di un’interfaccia è garantire che un object si comporterà esternamente mentre l’interfaccia specifica che lo farà

Se non si implementano tutti i metodi dell’interfaccia, si distrugge l’intero scopo dell’interfaccia.

Possiamo sovrascrivere tutti i metodi dell’interfaccia nella class padre abstract e nella class figlio sovrascrivere solo quei metodi che sono richiesti da quella particolare class figlio.

Interfaccia

 public interface MyInterface{ void method1(); void method2(); void method3(); } 

Classe genitore astratta

 public abstract class Parent implements MyInterface{ @Override public void method1(){ } @Override public void method2(){ } @Override public void method3(){ } } 

Nelle tue classi di bambini

 public class Child1 extends Parent{ @Override public void method1(){ } } public class Child2 extends Parent{ @Override public void method2(){ } } 

Definisci quella class come una class abstract . Tuttavia, è necessario implementare quei metodi non implementati quando si desidera crearne un’istanza (utilizzando una sottoclass o una class anonima).

Mi sono posto la stessa domanda e ho imparato a conoscere gli adattatori. Ha risolto il mio problema, forse può risolvere il tuo. Questo lo spiega molto bene: https://blogs.oracle.com/CoreJavaTechTips/entry/listeners_vs_adapters

Se vuoi una lezione istantanea, non è ansible. Puoi provare a definire una class abstract , però.

È ansible ed è facile. Ho codificato un esempio .

Tutto ciò che devi fare è ereditare da una class che implementa il metodo. Se non ti dispiace una class che non è istantanea, puoi anche definire una class abstract .

Puoi farlo in Java8. Java 8 introduce la nuova funzione “Metodo predefinito” o (metodi Defender), che consente a uno sviluppatore di aggiungere nuovi metodi alle interfacce senza interrompere l’implementazione esistente di queste interfacce.

Fornisce flessibilità per consentire all’interfaccia di definire l’implementazione che verrà utilizzata come impostazione predefinita nella situazione in cui una class concreta non riesce a fornire un’implementazione per tale metodo.

 interface OldInterface { public void existingMethod(); default public void DefaultMethod() { System.out.println("New default method" + " is added in interface"); } } //following class compiles successfully in JDK 8 public class ClassImpl implements OldInterface { @Override public void existingMethod() { System.out.println("normal method"); } public static void main(String[] args) { ClassImpl obj = new ClassImpl (); // print “New default method add in interface” obj.DefaultMethod(); } }