From f107a2d2fcd5459c8624d4cac92aae592810a1f9 Mon Sep 17 00:00:00 2001 From: Karthick S Date: Wed, 28 Apr 2021 22:05:52 +0530 Subject: [PATCH] Interface vs Abstract Class in Java --- .../core-java-lang-oop-patterns/README.md | 1 + .../interface_vs_abstract_class/Car.java | 42 ++++++++++++++ .../ImageSender.java | 12 ++++ .../interface_vs_abstract_class/Sender.java | 8 +++ .../interface_vs_abstract_class/Vehicle.java | 57 +++++++++++++++++++ .../VideoSender.java | 13 +++++ .../SenderUnitTest.java | 21 +++++++ .../VehicleUnitTest.java | 21 +++++++ 8 files changed, 175 insertions(+) create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Car.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/ImageSender.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Sender.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Vehicle.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/VideoSender.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/SenderUnitTest.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/VehicleUnitTest.java diff --git a/core-java-modules/core-java-lang-oop-patterns/README.md b/core-java-modules/core-java-lang-oop-patterns/README.md index 178a556a96..0f04a55e36 100644 --- a/core-java-modules/core-java-lang-oop-patterns/README.md +++ b/core-java-modules/core-java-lang-oop-patterns/README.md @@ -7,3 +7,4 @@ This module contains articles about Object-oriented programming (OOP) patterns i - [Inheritance and Composition (Is-a vs Has-a relationship) in Java](https://www.baeldung.com/java-inheritance-composition) - [Immutable Objects in Java](https://www.baeldung.com/java-immutable-object) - [How to Make a Deep Copy of an Object in Java](https://www.baeldung.com/java-deep-copy) +- [Interface vs Abstract Class in Java](https://www.baeldung.com/interface-vs-abstract-class-in-java/) diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Car.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Car.java new file mode 100644 index 0000000000..11923be671 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Car.java @@ -0,0 +1,42 @@ +package com.baeldung.interface_vs_abstract_class; + +public class Car extends Vehicle { + + public Car(String vechicleName) { + super(vechicleName); + } + + public Car(String vechicleName, String vehicleModel) { + super(vechicleName, vehicleModel); + } + + public Car(String vechicleName, String vehicleModel, Long makeYear) { + super(vechicleName, vehicleModel, makeYear); + } + + @Override + protected void start() { + // code implementation details on starting a car. + } + + @Override + protected void stop() { + // code implementation details on stopping a car. + } + + @Override + protected void drive() { + // code implementation details on start driving a car. + } + + @Override + protected void changeGear() { + // code implementation details on changing the car gear. + } + + @Override + protected void reverse() { + // code implementation details on reverse driving a car. + } + +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/ImageSender.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/ImageSender.java new file mode 100644 index 0000000000..ccaee8157d --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/ImageSender.java @@ -0,0 +1,12 @@ +package com.baeldung.interface_vs_abstract_class; + +import java.io.File; + +public class ImageSender implements Sender { + + @Override + public void send(File fileToBeSent) { + // image sending implementation code. + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Sender.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Sender.java new file mode 100644 index 0000000000..72aa4a7681 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Sender.java @@ -0,0 +1,8 @@ +package com.baeldung.interface_vs_abstract_class; + +import java.io.File; + +public interface Sender { + + void send(File fileToBeSent); +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Vehicle.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Vehicle.java new file mode 100644 index 0000000000..0661ddbdf4 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/Vehicle.java @@ -0,0 +1,57 @@ +package com.baeldung.interface_vs_abstract_class; + +public abstract class Vehicle { + + private String vehicleName; + private String vehicleModel; + private Long makeYear; + + public Vehicle(String vehicleName) { + this.vehicleName = vehicleName; + } + + public Vehicle(String vehicleName, String vehicleModel) { + this(vehicleName); + this.vehicleModel = vehicleModel; + } + + public Vehicle(String vechicleName, String vehicleModel, Long makeYear) { + this(vechicleName, vehicleModel); + this.makeYear = makeYear; + } + + public String getVehicleName() { + return vehicleName; + } + + public void setVehicleName(String vehicleName) { + this.vehicleName = vehicleName; + } + + public String getVehicleModel() { + return vehicleModel; + } + + public void setVehicleModel(String vehicleModel) { + this.vehicleModel = vehicleModel; + } + + public Long getMakeYear() { + return makeYear; + } + + public void setMakeYear(Long makeYear) { + this.makeYear = makeYear; + } + + protected abstract void start(); + + protected abstract void stop(); + + protected abstract void drive(); + + protected abstract void changeGear(); + + protected abstract void reverse(); + +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/VideoSender.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/VideoSender.java new file mode 100644 index 0000000000..d61281f7b1 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interface_vs_abstract_class/VideoSender.java @@ -0,0 +1,13 @@ +package com.baeldung.interface_vs_abstract_class; + +import java.io.File; + +public class VideoSender implements Sender { + + @Override + public void send(File fileToBeSent) { + // video sending implementation code + System.out.println("Sending Video..."); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/SenderUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/SenderUnitTest.java new file mode 100644 index 0000000000..219e7218a1 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/SenderUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.interface_vs_abstract_class; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import java.io.File; + +class SenderUnitTest { + + public final static String IMAGE_FILE_PATH = "/sample_image_file_path/photo.jpg"; + + @Test + void givenImageUploaded_whenButtonClicked_thenSendImage() { + + File imageFile = new File(IMAGE_FILE_PATH); + + Sender sender = new ImageSender(); + sender.send(imageFile); + } + +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/VehicleUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/VehicleUnitTest.java new file mode 100644 index 0000000000..28921446fd --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interface_vs_abstract_class/VehicleUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.interface_vs_abstract_class; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class VehicleUnitTest { + + @Test + void givenVehicle_whenNeedToDrive_thenStart() { + + Vehicle car = new Car("BMW"); + + car.start(); + car.drive(); + car.changeGear(); + car.stop(); + + } + +}