void m2(P a) {
+ // Code goes here
+ }
+}
\ No newline at end of file
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingSub.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingSub.java
new file mode 100644
index 0000000..d918596
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingSub.java
@@ -0,0 +1,8 @@
+// LateBindingSub.java
+package com.jdojo.inheritance;
+
+public class LateBindingSub extends LateBindingSuper{
+ public void print() {
+ System.out.println("Inside LateBindingSub.print()");
+ }
+}
\ No newline at end of file
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingSuper.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingSuper.java
new file mode 100644
index 0000000..d72262d
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingSuper.java
@@ -0,0 +1,8 @@
+// LateBindingSuper.java
+package com.jdojo.inheritance;
+
+public class LateBindingSuper {
+ public void print() {
+ System.out.println("Inside LateBindingSuper.print()");
+ }
+}
\ No newline at end of file
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingTest.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingTest.java
new file mode 100644
index 0000000..d6fe1d1
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/LateBindingTest.java
@@ -0,0 +1,25 @@
+// LateBindingTest.java
+package com.jdojo.inheritance;
+
+public class LateBindingTest {
+ public static void main(String[] args) {
+ LateBindingSuper lbSuper = new LateBindingSuper();
+ LateBindingSub lbSub = new LateBindingSub();
+
+ // Will access EarlyBindingSuper.print()
+ lbSuper.print(); // #1
+
+ // Will access EarlyBindingSub.print()
+ lbSub.print(); // #2
+
+ // Will access EarlyBindingSub.print()
+ ((LateBindingSuper)lbSub).print(); // #3
+
+ // Assign the lbSub to lbSuper
+ lbSuper = lbSub; // Upcasting
+
+ // Will access EarlyBindingSub.print() because lbSuper
+ // is referring to a LateBindingSub object
+ lbSuper.print(); // #4
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingSub.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingSub.java
new file mode 100644
index 0000000..de51649
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingSub.java
@@ -0,0 +1,8 @@
+// MHidingSub.java
+package com.jdojo.inheritance;
+
+public class MHidingSub extends MHidingSuper {
+ public static void print() {
+ System.out.println("Inside MHidingSub.print()");
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingSuper.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingSuper.java
new file mode 100644
index 0000000..2ec733b
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingSuper.java
@@ -0,0 +1,8 @@
+// MHidingSuper.java
+package com.jdojo.inheritance;
+
+public class MHidingSuper {
+ public static void print() {
+ System.out.println("Inside MHidingSuper.print()");
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingTest.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingTest.java
new file mode 100644
index 0000000..a68ca1a
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/MHidingTest.java
@@ -0,0 +1,29 @@
+// MHidingTest.java
+package com.jdojo.inheritance;
+
+public class MHidingTest {
+ public static void main(String[] args) {
+ MHidingSuper mhSuper = new MHidingSub();
+ MHidingSub mhSub = new MHidingSub();
+
+ System.out.println("#1");
+
+ // #1
+ MHidingSuper.print();
+ mhSuper.print();
+
+ System.out.println("#2");
+
+ // #2
+ MHidingSub.print();
+ mhSub.print();
+ ((MHidingSuper) mhSub).print();
+
+ System.out.println("#3");
+
+ // #3
+ mhSuper = mhSub;
+ mhSuper.print();
+ ((MHidingSub) mhSuper).print();
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager.java
new file mode 100644
index 0000000..8b8288b
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager.java
@@ -0,0 +1,6 @@
+// Manager.java
+package com.jdojo.inheritance;
+
+public class Manager extends Employee {
+ // No code is needed for now
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager2.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager2.java
new file mode 100644
index 0000000..ee29ce0
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager2.java
@@ -0,0 +1,8 @@
+// Manager2.java
+package com.jdojo.inheritance;
+
+public class Manager2 extends Employee2 {
+ public Manager2(String name) {
+ super(name);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager2Test.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager2Test.java
new file mode 100644
index 0000000..8c2ed53
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Manager2Test.java
@@ -0,0 +1,10 @@
+// Manager2Test.java
+package com.jdojo.inheritance;
+
+public class Manager2Test {
+ public static void main(String[] args) {
+ Manager2 mgr = new Manager2("John Jacobs");
+ String name = mgr.getName();
+ System.out.println("Manager name: " + name);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/OverloadingTest.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/OverloadingTest.java
new file mode 100644
index 0000000..6322399
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/OverloadingTest.java
@@ -0,0 +1,52 @@
+// OverloadingTest.java
+package com.jdojo.inheritance;
+
+public class OverloadingTest {
+ public double add(int a, int b) {
+ System.out.println("Inside add(int a, int b)");
+ double s = a + b;
+ return s;
+ }
+
+ public double add(double a, double b) {
+ System.out.println("Inside add(double a, double b)");
+ double s = a + b;
+ return s;
+ }
+
+ public void test(Employee e) {
+ System.out.println("Inside test(Employee e)");
+ }
+
+ public void test(Manager e) {
+ System.out.println("Inside test(Manager m)");
+ }
+
+ public static void main(String[] args) {
+ OverloadingTest ot = new OverloadingTest();
+
+ int i = 10;
+ int j = 15;
+ double d1 = 10.4;
+ double d2 = 2.5;
+ float f1 = 2.3F;
+ float f2 = 4.5F;
+ short s1 = 2;
+ short s2 = 6;
+
+ ot.add(i, j);
+ ot.add(d1, j);
+ ot.add(i, s1);
+ ot.add(s1, s2);
+ ot.add(f1, f2);
+ ot.add(f1, s2);
+
+ Employee emp = new Employee();
+ Manager mgr = new Manager();
+ ot.test(emp);
+ ot.test(mgr);
+
+ emp = mgr;
+ ot.test(emp);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Rectangle.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Rectangle.java
new file mode 100644
index 0000000..cad2b19
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Rectangle.java
@@ -0,0 +1,29 @@
+// Rectangle.java
+package com.jdojo.inheritance;
+
+public class Rectangle extends Shape {
+ private double width;
+ private double height;
+
+ public Rectangle(double width, double height) {
+ // Set the shape name as "Rectangle"
+ super("Rectangle");
+ this.width = width;
+ this.height = height;
+ }
+
+ // Provide an implementation for inherited abstract draw() method
+ public void draw() {
+ System.out.println("Drawing a rectangle...");
+ }
+
+ // Provide an implementation for inherited abstract getArea() method
+ public double getArea() {
+ return width * height;
+ }
+
+ // Provide an implementation for inherited abstract getPerimeter() method
+ public double getPerimeter() {
+ return 2.0 * (width + height);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Shape.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Shape.java
new file mode 100644
index 0000000..06e47e6
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/Shape.java
@@ -0,0 +1,27 @@
+// Shape.java
+package com.jdojo.inheritance;
+
+public abstract class Shape {
+ private String name;
+
+ public Shape() {
+ this.name = "Unknown shape";
+ }
+
+ public Shape(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ // Abstract methods
+ public abstract void draw();
+ public abstract double getArea();
+ public abstract double getPerimeter();
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/ShapeUtil.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/ShapeUtil.java
new file mode 100644
index 0000000..825fd0e
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/ShapeUtil.java
@@ -0,0 +1,25 @@
+// ShapeUtil.java
+package com.jdojo.inheritance;
+
+public class ShapeUtil {
+ public static void drawShapes(Shape[] list) {
+ for (int i = 0; i < list.length; i++) {
+ // Draw a shape, no matter what it is
+ list[i].draw(); // Late binding
+ }
+ }
+
+ public static void printShapeDetails(Shape[] list) {
+ for (int i = 0; i < list.length; i++) {
+ // Gather details about the shape
+ String name = list[i].getName(); // Late Binding
+ double area = list[i].getArea(); // Late binding
+ double perimeter = list[i].getPerimeter(); // Late binding
+
+ // Print details
+ System.out.println("Name: " + name);
+ System.out.println("Area: " + area);
+ System.out.println("Perimeter: " + perimeter);
+ }
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/ShapeUtilTest.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/ShapeUtilTest.java
new file mode 100644
index 0000000..1da1320
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/ShapeUtilTest.java
@@ -0,0 +1,17 @@
+// ShapeUtilTest
+package com.jdojo.inheritance;
+
+public class ShapeUtilTest {
+ public static void main(String[] args) {
+ // Create some shapes, draw, and print their details
+ Shape[] shapeList = new Shape[2];
+ shapeList[0] = new Rectangle(2.0, 4.0); // Upcasting
+ shapeList[1] = new Circle(5.0); // Upcasting
+
+ // Draw all shapes
+ ShapeUtil.drawShapes(shapeList);
+
+ // Print details of all shapes
+ ShapeUtil.printShapeDetails(shapeList);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/SimplestInheritanceTest.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/SimplestInheritanceTest.java
new file mode 100644
index 0000000..13484f3
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/SimplestInheritanceTest.java
@@ -0,0 +1,18 @@
+// SimplestInheritanceTest.java
+package com.jdojo.inheritance;
+
+public class SimplestInheritanceTest {
+ public static void main(String[] args) {
+ // Create an object of the Manager class
+ Manager mgr = new Manager();
+
+ // Set the name of the manager
+ mgr.setName("Leslie Zanders");
+
+ // Get the name of the manager
+ String mgrName = mgr.getName();
+
+ // Display the manager name
+ System.out.println("Manager Name: " + mgrName);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/inheritance/UpcastTest.java b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/UpcastTest.java
new file mode 100644
index 0000000..3fcc628
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/inheritance/UpcastTest.java
@@ -0,0 +1,16 @@
+// UpcastTest.java
+package com.jdojo.inheritance;
+
+public class UpcastTest {
+ public static void main(String[] args) {
+ Employee emp = new Employee();
+ emp.setName("Ken Wood");
+
+ Manager mgr = new Manager();
+ mgr.setName("Ken Furr"); // Inheritance of setName() at work
+
+ // Print names
+ EmpUtil.printName(emp);
+ EmpUtil.printName(mgr); // Upcasting at work
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/interfaces/Cat.java b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/Cat.java
new file mode 100644
index 0000000..78fd205
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/Cat.java
@@ -0,0 +1,14 @@
+// Cat.java
+package com.jdojo.interfaces;
+
+public class Cat implements Walkable {
+ private String name;
+
+ public Cat(String name) {
+ this.name = name;
+ }
+
+ public void walk() {
+ System.out.println(name + " (a cat) is walking.");
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/interfaces/CharitySinger.java b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/CharitySinger.java
new file mode 100644
index 0000000..72496fd
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/CharitySinger.java
@@ -0,0 +1,14 @@
+// CharitySinger.java
+package com.jdojo.interfaces;
+
+public interface CharitySinger extends Singer {
+ @Override
+ default void setRate(double rate) {
+ // A no-op
+ }
+
+ @Override
+ default double getRate() {
+ return 0.0;
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/interfaces/CharitySingerPlayer.java b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/CharitySingerPlayer.java
new file mode 100644
index 0000000..0804d79
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/CharitySingerPlayer.java
@@ -0,0 +1,15 @@
+// CharitySingerPlayer.java
+package com.jdojo.interfaces;
+
+public interface CharitySingerPlayer extends CharitySinger, Player {
+ // Override the setRate() method with an abstract method
+ @Override
+ void setRate(double rate);
+
+ // Override the getRate() method with a default method that calls the
+ // Player superinterface getRate() method
+ @Override
+ default double getRate() {
+ return Player.super.getRate();
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/interfaces/Choices.java b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/Choices.java
new file mode 100644
index 0000000..8878d20
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/Choices.java
@@ -0,0 +1,7 @@
+// Choices.java
+package com.jdojo.interfaces;
+
+public interface Choices {
+ public static final int YES = 1;
+ public static final int NO = 2;
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/interfaces/ChoicesTest.java b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/ChoicesTest.java
new file mode 100644
index 0000000..937d2a7
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/ChoicesTest.java
@@ -0,0 +1,9 @@
+// ChoicesTest.java
+package com.jdojo.interfaces;
+
+public class ChoicesTest {
+ public static void main(String[] args) {
+ System.out.println("Choices.YES = " + Choices.YES);
+ System.out.println("Choices.NO = " + Choices.NO);
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/interfaces/ComparablePerson.java b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/ComparablePerson.java
new file mode 100644
index 0000000..c3a682e
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/interfaces/ComparablePerson.java
@@ -0,0 +1,43 @@
+// ComparablePerson.java
+package com.jdojo.interfaces;
+
+public class ComparablePerson implements Comparablestatic
. It
+ * provides methods to perform addition, subtraction,
+ * multiplication and division.
+ *
+ * @author Kishori Sharan
+ * @since Version 1.0
+ */
+public final class Calc {
+ /**
+ * Stop someone from instantiating this class. This class is not
+ * meant for instantiation as all its methods are
+ * static
.
+ */
+ private Calc() {
+ }
+
+ /**
+ * Performs addition on two numbers. It returns the result of
+ * n1 + n2
as an int
. If the result
+ * of n1 + n2
exceeds the range of the
+ * int
data type, it will not return the correct
+ * result. For bigger numbers, use {@link #add(long, long)}.
+ *
+ * @param n1 The first number
+ * @param n2 The second number
+ * @return Returns the value of n1 + n2
+ */
+ public static int add(int n1, int n2) {
+ return n1 + n2;
+ }
+
+ /**
+ * Performs addition on two numbers. It returns the result of
+ * n1 + n2
as a long
.
+ *
+ * @param n1 The first number
+ * @param n2 The second number
+ * @return Returns the value of n1 + n2
+ */
+ public static long add(long n1, long n2) {
+ return n1 + n2;
+ }
+
+ /**
+ * Returns the result of n1 - n2
.
+ *
+ * @param n1 The first number
+ * @param n2 The second number
+ * @return Returns the result of n1 - n2
+ */
+ public static int subtract(int n1, int n2) {
+ return n1 - n2;
+ }
+
+ /**
+ * Returns the result of multiplication of n1
and
+ * n2
. It may return incorrect result if the value of
+ * the multiplication of n1
and n2
+ * exceeds the range of the int
data type.
+ *
+ * @param n1 The multiplicand
+ * @param n2 The multiplier
+ * @return Returns the result of multiplication of
+ * n1
and n2
+ */
+ public static int multiply(int n1, int n2) {
+ return n1 * n2;
+ }
+
+ /**
+ * Returns the result of integer division of n1
by
+ * n2
.
+ *
+ * @param n1 The dividend
+ * @param n2 The divisor
+ * @return Returns the result of n1 / n2
+ * @throws ArithmeticException If n2
is zero.
+ */
+ public static int divide(int n1, int n2)
+ throws ArithmeticException {
+ return n1 / n2;
+ }
+}
\ No newline at end of file
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/utility/package-info.java b/BeginningJava8Fundamentals/src/com/jdojo/utility/package-info.java
new file mode 100644
index 0000000..03e03e8
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/utility/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * Contains utility classes. More description for
+ * com.jdojo.utility package goes here.
+ * @since 1.1
+ * @version 1.9
+ */
+package com.jdojo.utility;
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/wrapper/CachedWrapperObjects.java b/BeginningJava8Fundamentals/src/com/jdojo/wrapper/CachedWrapperObjects.java
new file mode 100644
index 0000000..6704e4a
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/wrapper/CachedWrapperObjects.java
@@ -0,0 +1,32 @@
+// CachedWrapperObjects.java
+package com.jdojo.wrapper;
+
+public class CachedWrapperObjects {
+ public static void main(String[] args) {
+ System.out.println("Using the constructor:");
+
+ // Create two Integer objects using constructors
+ Integer iv1 = new Integer(25);
+ Integer iv2 = new Integer(25);
+ System.out.println("iv1 = iv1 = " + iv1 + ", iv2 = " + iv2);
+
+ // Compare iv1 and iv2 references
+ System.out.println("iv1 == iv2: " + (iv1 == iv2));
+
+ // Let us see if they are equal in values
+ System.out.println("iv1.equals(iv2): " + iv1.equals(iv2));
+
+ System.out.println("\nUsing the valueOf() method:");
+
+ // Create two Integer objects using the valueOf()
+ Integer iv3 = Integer.valueOf(25);
+ Integer iv4 = Integer.valueOf(25);
+ System.out.println("iv3 = " + iv3 + ", iv4 = " + iv4);
+
+ // Compare iv3 and iv4 references
+ System.out.println("iv3 == iv4: " + (iv3 == iv4));
+
+ // Let us see if they are qual in values
+ System.out.println("iv3.equals(iv4): " + iv3.equals(iv4));
+ }
+}
diff --git a/BeginningJava8Fundamentals/src/com/jdojo/wrapper/MathUtil.java b/BeginningJava8Fundamentals/src/com/jdojo/wrapper/MathUtil.java
new file mode 100644
index 0000000..080864d
--- /dev/null
+++ b/BeginningJava8Fundamentals/src/com/jdojo/wrapper/MathUtil.java
@@ -0,0 +1,31 @@
+// MathUtil.java
+package com.jdojo.wrapper;
+
+public class MathUtil {
+ public static Integer add(Integer a, Integer b) {
+ int aValue = a.intValue();
+ int bValue = b.intValue();
+ int resultValue = aValue + bValue;
+ Integer result = Integer.valueOf(resultValue);
+ return result;
+ }
+
+ public static void main(String[] args) {
+ int iValue = 200;
+ int jValue = 300;
+ int kValue; /* will hold result as int */
+
+ // Box iValue and jValue into Integer objects
+ Integer i = Integer.valueOf(iValue);
+ Integer j = Integer.valueOf(jValue);
+
+ // Store returned value of the add() method in an Integer object k
+ Integer k = MathUtil.add(i, j);
+
+ // Unbox Integer object's int value into kValue int variable
+ kValue = k.intValue();
+
+ // Display the result using int variables
+ System.out.println(iValue + " + " + jValue + " = " + kValue);
+ }
+}