diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml
index 6d3771bd31..549f307aee 100644
--- a/core-java-modules/core-java-lang-5/pom.xml
+++ b/core-java-modules/core-java-lang-5/pom.xml
@@ -13,6 +13,7 @@
core-java-modules
0.0.1-SNAPSHOT
+
core-java-lang-5
@@ -24,4 +25,18 @@
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+
+ org.reflections
+ reflections
+ 0.10.2
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java
new file mode 100644
index 0000000000..414f421da3
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java
@@ -0,0 +1,5 @@
+package com.baeldung.checkInterface;
+
+public class ChildClass1 implements ChildInterface1 {
+
+}
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java
new file mode 100644
index 0000000000..568c7b57c7
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java
@@ -0,0 +1,5 @@
+package com.baeldung.checkInterface;
+
+public class ChildClass2 implements ChildInterface2 {
+
+}
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java
new file mode 100644
index 0000000000..02f87d1901
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java
@@ -0,0 +1,5 @@
+package com.baeldung.checkInterface;
+
+public interface ChildInterface1 extends MasterInterface {
+
+}
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java
new file mode 100644
index 0000000000..80a5915b27
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java
@@ -0,0 +1,5 @@
+package com.baeldung.checkInterface;
+
+public interface ChildInterface2 extends MasterInterface {
+
+}
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java
new file mode 100644
index 0000000000..133e8bb0a7
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java
@@ -0,0 +1,5 @@
+package com.baeldung.checkInterface;
+
+public class MasterClass implements MasterInterface {
+
+}
diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java
new file mode 100644
index 0000000000..554816df4d
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java
@@ -0,0 +1,5 @@
+package com.baeldung.checkInterface;
+
+public interface MasterInterface {
+
+}
diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java
new file mode 100644
index 0000000000..3a1f8ff2b6
--- /dev/null
+++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java
@@ -0,0 +1,127 @@
+package com.baeldung.checkInterface;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.lang3.ClassUtils;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.reflections.ReflectionUtils;
+import org.reflections.Reflections;
+
+public class CheckInterfaceUnitTest {
+
+ protected static Reflections reflections;
+
+ @BeforeAll
+ public static void initializeReflectionsLibrary() {
+
+ reflections = new Reflections("com.baeldung.checkInterface");
+ }
+
+ @Test
+ public void whenUsingReflectionGetInterfaces_thenDirectlyImplementedInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+ List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces());
+
+ assertTrue(interfaces.contains(ChildInterface2.class));
+ }
+
+ @Test
+ public void whenUsingReflectionGetInterfaces_thenParentInterfaceIsNotFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+ List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces());
+
+ assertFalse(interfaces.contains(MasterInterface.class));
+ }
+
+ @Test
+ public void whenUsingReflectionIsAssignableFrom_thenDirectlyImplementedInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+
+ assertTrue(ChildInterface2.class.isAssignableFrom(childClass2.getClass()));
+ }
+
+ @Test
+ public void whenUsingReflectionIsAssignableFrom_thenParentInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+
+ assertTrue(MasterInterface.class.isAssignableFrom(childClass2.getClass()));
+ }
+
+ @Test
+ public void whenUsingReflectionIsInstance_thenDirectlyImplementedInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+
+ assertTrue(ChildInterface2.class.isInstance(childClass2));
+ }
+
+ @Test
+ public void whenUsingReflectionIsInstance_thenParentInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+
+ assertTrue(MasterInterface.class.isInstance(childClass2));
+ }
+
+ @Test
+ public void whenUsingReflectionInstanceOf_thenDirectlyImplementedInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+
+ assertTrue(childClass2 instanceof ChildInterface2);
+ }
+
+ @Test
+ public void whenUsingReflectionInstanceOf_thenParentInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+
+ assertTrue(childClass2 instanceof MasterInterface);
+ }
+
+ @Test
+ public void whenUsingCommons_thenDirectlyImplementedInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+ List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass());
+
+ assertTrue(interfaces.contains(ChildInterface2.class));
+ }
+
+ @Test
+ public void whenUsingCommons_thenParentInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+ List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass());
+
+ assertTrue(interfaces.contains(MasterInterface.class));
+ }
+
+ @Test
+ public void whenUsingReflections_thenDirectlyImplementedInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+ Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass()));
+
+ assertTrue(interfaces.contains(ChildInterface2.class));
+ }
+
+ @Test
+ public void whenUsingReflections_thenParentInterfaceIsFound() {
+
+ ChildClass2 childClass2 = new ChildClass2();
+ Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass()));
+
+ assertTrue(interfaces.contains(MasterInterface.class));
+ }
+}