인터페이스의 모든 방법을 구현하지 않습니다. 가능할까요?
할 수있는 방법이 있습니까 하지 상속 클래스에서 인터페이스의 모든 메소드를 구현는?
이 문제를 해결하는 유일한 방법은 클래스를 다음 abstract
과 같이 선언 하고 누락 된 메서드를 구현하기 위해 하위 클래스에 남겨 두는 것입니다. 그러나 궁극적으로 체인의 누군가는 인터페이스 계약을 충족하기 위해이를 구현해야합니다. 진정으로 특정 메서드가 필요하지 않은 경우이를 구현 한 다음 return
다양한을 던지거나 어떤 NotImplementedException
경우에 더 적합한.
인터페이스는 일부 메소드를 'default'로 지정하고 인터페이스 정의 ( https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html ) 내에서 해당 메소드 구현을 제공 할 수도 있습니다 . 이러한 '기본'메소드는 인터페이스를 구현하는 동안 언급 할 필요가 없습니다.
인터페이스의 요점은 객체가 인터페이스가 지정하는대로 외부 적으로 작동하도록 보장하는 것입니다.
인터페이스의 모든 메소드를 구현하지 않으면 인터페이스의 전체 목적을 파괴하는 것입니다.
abstract
부모 클래스의 모든 인터페이스 메서드를 재정의 할 수 있으며 자식 클래스에서는 특정 자식 클래스에 필요한 메서드 만 재정의 할 수 있습니다 .
상호 작용
public interface MyInterface{
void method1();
void method2();
void method3();
}
추상 부모 클래스
public abstract class Parent implements MyInterface{
@Override
public void method1(){
}
@Override
public void method2(){
}
@Override
public void method3(){
}
}
자녀 수업에서
public class Child1 extends Parent{
@Override
public void method1(){
}
}
public class Child2 extends Parent{
@Override
public void method2(){
}
}
나는 나 자신에게 같은 질문을하고 어댑터에 대해 배웠다. 그것은 내 문제를 해결했고 아마도 당신의 문제를 해결할 수있을 것입니다. 이것은 매우 잘 설명합니다 : https://blogs.oracle.com/CoreJavaTechTips/entry/listeners_vs_adapters
해당 클래스를 클래스로 정의하십시오 abstract
. 그러나 인스턴스를 만들려면 구현되지 않은 메서드를 구현해야합니다 (하위 클래스 또는 익명 클래스 사용).
인스턴스화 가능한 클래스를 원하면 불가능합니다. abstract
하지만 클래스 를 정의하려고 할 수 있습니다 .
가능하고 쉽습니다. 나는 예제를 코딩했다 .
메서드를 구현하는 클래스에서 상속하기 만하면됩니다. 인스턴스화 할 수없는 클래스가 마음에 들지 않으면 클래스를 정의 할 수도 있습니다 abstract
.
You can do that in Java8. Java 8 introduces “Default Method” or (Defender methods) new feature, which allows a developer to add new methods to the Interfaces without breaking the existing implementation of these interfaces.
It provides flexibility to allow Interface define implementation which will use as default in the situation where a concrete Class fails to provide an implementation for that method.
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();
}
}
If you try to implement an interface and you find yourself in a situation where there is no need to implement all of them then, this is a code smell. It indicates a bad design and it violates Liskov substitution principle. Often this happens because of using fat interface.
Also sometimes this happens because you are trying to implement an interface from an external dependency. In this case, I always look inside the source code to see if there is any implementation of that interface which I can either use it directly or subclass it and override methods to my needs.
We can use Adapter classes ,which reduces complexcity by not making mandatory to implement all the methods present in the interface
Adapter class is a simple java class that implements an interface with only EMPTY implementation . Instead of implementing interface if we extends Adapter class ,we provide implementation only for require method
ex--- instead of implementing Servlet(I) if we extends GenericServlet(AC) then we provide implementation for Service()method we are not require to provide implementation for remaining meyhod..
Generic class Acts as ADAPTER class for Servlet(I).
ReferenceURL : https://stackoverflow.com/questions/11437097/not-implementing-all-of-the-methods-of-interface-is-it-possible
'IT TIP' 카테고리의 다른 글
현재 시간 10 분 후 datetime을 찾는 방법은 무엇입니까? (0) | 2021.01.05 |
---|---|
.shape []는 "for i in range (Y.shape [0])"에서 무엇을합니까? (0) | 2021.01.05 |
Angularjs가 transcluded 및 격리 범위 및 바인딩에 대해 혼란 스러움 (0) | 2021.01.05 |
컬러 배경 및 파급 효과가있는 ListView 선택기 (0) | 2021.01.05 |
Bootstrap에서 btn 색상을 변경하는 방법 (0) | 2021.01.05 |