[BAEL-6859] Inner Classes vs. Subclasses in Java (#14608)

* [BAEL-6859] inner and sub classes

* [BAEL-6859] unit test cases added

---------

Co-authored-by: Bhaskar <bhaskar.dastidar@freshworks.com>
This commit is contained in:
Bhaskar Ghosh Dastidar 2023-08-19 01:06:51 +05:30 committed by GitHub
parent 08b5eda945
commit b25e324790
7 changed files with 93 additions and 0 deletions

View File

@ -0,0 +1,17 @@
package com.baeldung.subclassinnerclass;
import java.util.HashMap;
public class EmailNotifier extends Notifier {
@Override
void notify(Message e) {
// Provide email specific implementation here
}
// Inner class for email connection
static class EmailConnector {
private String emailHost;
private int emailPort;
// Getter Setters
}
}

View File

@ -0,0 +1,6 @@
package com.baeldung.subclassinnerclass;
public class Message {
private int message;
// getter setter and other atteibutes
}

View File

@ -0,0 +1,17 @@
package com.baeldung.subclassinnerclass;
public class NotificationService {
void notifyMessages() {
// Sending a Text Message
Message textMessage = new Message();
Notifier textNotifier = new TextMessageNotifier();
textNotifier.notify(textMessage);
// Sending an Email Message
Message emailMessage = new Message();
Notifier emailNotifier = new EmailNotifier();
emailNotifier.notify(emailMessage);
}
}

View File

@ -0,0 +1,5 @@
package com.baeldung.subclassinnerclass;
public abstract class Notifier {
abstract void notify(Message e);
}

View File

@ -0,0 +1,14 @@
package com.baeldung.subclassinnerclass;
public class TextMessageNotifier extends Notifier {
@Override
void notify(Message e) {
// Provide text message specific implementation here
}
// Inner class for text message connection
private static class SMSConnector {
private String smsHost;
// Getter Setters
}
}

View File

@ -0,0 +1,16 @@
package com.baeldung.subclassinnerclass;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import org.junit.Test;
public class InnerClassUnitTest {
@Test
public void givenInnerStaticClassWhenInstantiatedThenOuterClassIsInstantiated() {
Notifier emailNotifier = new EmailNotifier();
EmailNotifier.EmailConnector emailConnector = new EmailNotifier.EmailConnector();
assertThat(emailNotifier).hasSameClassAs(new EmailNotifier());
assertThat(emailConnector).isInstanceOf(EmailNotifier.EmailConnector.class);
}
}

View File

@ -0,0 +1,18 @@
package com.baeldung.subclassinnerclass;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import org.junit.Test;
public class SubClassUnitTest {
@Test
public void givenSubclassWhenInstantiatedThenSubclassObjectIsPossible() {
Notifier emailNotifier = new EmailNotifier();
assertThat(emailNotifier).hasSameClassAs(new EmailNotifier());
assertThat(emailNotifier).isExactlyInstanceOf(EmailNotifier.class);
Notifier textMessageNotifier = new TextMessageNotifier();
assertThat(textMessageNotifier).isInstanceOf(Notifier.class);
assertThat(textMessageNotifier).isExactlyInstanceOf(TextMessageNotifier.class);
}
}