diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Car.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Car.java new file mode 100644 index 0000000000..6f17ecc536 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Car.java @@ -0,0 +1,42 @@ +package com.baeldung.interfacevsabstractclass; + +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/interfacevsabstractclass/ImageSender.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/ImageSender.java new file mode 100644 index 0000000000..1948cc6583 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/ImageSender.java @@ -0,0 +1,12 @@ +package com.baeldung.interfacevsabstractclass; + +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/interfacevsabstractclass/Sender.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Sender.java new file mode 100644 index 0000000000..fde6527ef6 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Sender.java @@ -0,0 +1,8 @@ +package com.baeldung.interfacevsabstractclass; + +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/interfacevsabstractclass/Vehicle.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Vehicle.java new file mode 100644 index 0000000000..d98b8ca93b --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/Vehicle.java @@ -0,0 +1,57 @@ +package com.baeldung.interfacevsabstractclass; + +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/interfacevsabstractclass/VideoSender.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/VideoSender.java new file mode 100644 index 0000000000..71f8050590 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/interfacevsabstractclass/VideoSender.java @@ -0,0 +1,12 @@ +package com.baeldung.interfacevsabstractclass; + +import java.io.File; + +public class VideoSender implements Sender { + + @Override + public void send(File fileToBeSent) { + // video sending implementation code + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interfacevsabstractclass/SenderUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interfacevsabstractclass/SenderUnitTest.java new file mode 100644 index 0000000000..6419721b3a --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interfacevsabstractclass/SenderUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.interfacevsabstractclass; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import com.baeldung.interfacevsabstractclass.ImageSender; +import com.baeldung.interfacevsabstractclass.Sender; + +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/interfacevsabstractclass/VehicleUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interfacevsabstractclass/VehicleUnitTest.java new file mode 100644 index 0000000000..1650ab9257 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/interfacevsabstractclass/VehicleUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.interfacevsabstractclass; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +import com.baeldung.interfacevsabstractclass.Car; +import com.baeldung.interfacevsabstractclass.Vehicle; + +class VehicleUnitTest { + + @Test + void givenVehicle_whenNeedToDrive_thenStart() { + Vehicle car = new Car("BMW"); + + car.start(); + car.drive(); + car.changeGear(); + car.stop(); + } + +}