diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/AbstractClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/AbstractClass.java new file mode 100644 index 0000000000..7599529014 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/AbstractClass.java @@ -0,0 +1,5 @@ +package com.baeldung.abstractconstructors.defaultconstructor; + +public abstract class AbstractClass { + // compiler creates a default constructor +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/ConcreteClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/ConcreteClass.java new file mode 100644 index 0000000000..71c418735d --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/ConcreteClass.java @@ -0,0 +1,8 @@ +package com.baeldung.abstractconstructors.defaultconstructor; + +public class ConcreteClass extends AbstractClass { + + public ConcreteClass() { + super(); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/AbstractClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/AbstractClass.java new file mode 100644 index 0000000000..bdd554b2d9 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/AbstractClass.java @@ -0,0 +1,8 @@ +package com.baeldung.abstractconstructors.noargs; + +public abstract class AbstractClass { + + public AbstractClass() { + System.out.println("Initializing AbstractClass"); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassA.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassA.java new file mode 100644 index 0000000000..8339098127 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassA.java @@ -0,0 +1,4 @@ +package com.baeldung.abstractconstructors.noargs; + +public class ConcreteClassA extends AbstractClass { +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassB.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassB.java new file mode 100644 index 0000000000..cad20d2ec0 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassB.java @@ -0,0 +1,8 @@ +package com.baeldung.abstractconstructors.noargs; + +public class ConcreteClassB extends AbstractClass { + + public ConcreteClassB() { + System.out.println("Initializing ConcreteClassB"); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/Counter.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/Counter.java new file mode 100644 index 0000000000..a0471ad777 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/Counter.java @@ -0,0 +1,18 @@ +package com.baeldung.abstractconstructors.noargs; + +public abstract class Counter { + + int value; + + private Counter() { + this.value = 0; + System.out.println("Counter No-Arguments constructor"); + } + + public Counter(int value) { + this.value = value; + System.out.println("Parametrized Counter constructor"); + } + + abstract int increment(); +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/SimpleCounter.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/SimpleCounter.java new file mode 100644 index 0000000000..93add905df --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/SimpleCounter.java @@ -0,0 +1,13 @@ +package com.baeldung.abstractconstructors.noargs; + +public class SimpleCounter extends Counter { + + public SimpleCounter(int value) { + super(value); + } + + @Override + int increment() { + return ++value; + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/Car.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/Car.java new file mode 100644 index 0000000000..8919636b7e --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/Car.java @@ -0,0 +1,28 @@ +package com.baeldung.abstractconstructors.parametrized; + +public abstract class Car { + + private int distance; + + private Car(int distance) { + this.distance = distance; + } + + public Car() { + this(0); + System.out.println("Car default constructor"); + } + + abstract String getInformation(); + + protected void display() { + String info = new StringBuilder(getInformation()) + .append("\nDistance: " + getDistance()) + .toString(); + System.out.println(info); + } + + public int getDistance() { + return distance; + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/ElectricCar.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/ElectricCar.java new file mode 100644 index 0000000000..e17ea6d9c5 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/ElectricCar.java @@ -0,0 +1,17 @@ +package com.baeldung.abstractconstructors.parametrized; + +public class ElectricCar extends Car { + + int chargingTime; + + public ElectricCar(int chargingTime) { + this.chargingTime = chargingTime; + } + + @Override + String getInformation() { + return new StringBuilder("Electric Car") + .append("\nCharging Time: " + chargingTime) + .toString(); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/FuelCar.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/FuelCar.java new file mode 100644 index 0000000000..c18c3a26ef --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/FuelCar.java @@ -0,0 +1,17 @@ +package com.baeldung.abstractconstructors.parametrized; + +public class FuelCar extends Car { + + String fuel; + + public FuelCar(String fuel) { + this.fuel = fuel; + } + + @Override + String getInformation() { + return new StringBuilder("Fuel Car") + .append("\nFuel type: " + fuel) + .toString(); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/AbstractClassUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/AbstractClassUnitTest.java new file mode 100644 index 0000000000..c72d3b0f3f --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/AbstractClassUnitTest.java @@ -0,0 +1,18 @@ +package com.baeldung.abstractconstructors.noargs; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class AbstractClassUnitTest { + + @Test + void givenNoArgsAbstractConstructor_whenNewSubclassA_thenCalled() { + assertNotNull(new ConcreteClassA()); + } + + @Test + void givenNoArgsAbstractConstructor_whenNewSubclassB_thenCalled() { + assertNotNull(new ConcreteClassB()); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/CounterUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/CounterUnitTest.java new file mode 100644 index 0000000000..774136c5b6 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/CounterUnitTest.java @@ -0,0 +1,16 @@ +package com.baeldung.abstractconstructors.noargs; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class CounterUnitTest { + + @Test + void givenNoArgAbstractConstructor_whenSubclassCreation_thenCalled() { + Counter counter = new SimpleCounter(1); + assertNotNull(counter); + assertEquals(1, counter.value); + } +} diff --git a/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/parametrized/CarUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/parametrized/CarUnitTest.java new file mode 100644 index 0000000000..6d17861355 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/parametrized/CarUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.abstractconstructors.parametrized; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class CarUnitTest { + @Test + void givenParametrizedConstructor_whenConcreteCreation_thenCall() { + ElectricCar electricCar = new ElectricCar(8); + assertNotNull(electricCar); + electricCar.display(); + + System.out.println(); + + FuelCar fuelCar = new FuelCar("Gasoline"); + assertNotNull(fuelCar); + fuelCar.display(); + } +}