Payment Process using an Interface: =================================== ==> here this application developing with four modules. ==> module ==> a java file 1) interface.java 2) implementClass1.java 3) implementClass2.java 4) MainClass.java 1) interface.java ================== package Interface.IO.Java.Pack; public interface PayementProcess { String processPayment(double amount); boolean paymentStatus(String txId); } 2) implementClass1.java ======================= package Interface.IO.Java.Pack; import java.util.Random; public class PaypalProcessor implements PayementProcess { @Override public String processPayment(double amount) { if(amount <= 0) { return "ppnull101"; } else { return "pp" + new Random().nextInt(10000); } } @Override public boolean paymentStatus(String txId) { if(txId.startsWith("ppnull")) { return false; } else { return true; } } 3) implementClass2.java ======================== package Interface.IO.Java.Pack; import java.util.Random; public class StripeProcessor implements PayementProcess { @Override public String processPayment(double amount) { if(amount <= 0) { return "spnull101"; } else { return "sp" + new Random().nextInt(10000); } } @Override public boolean paymentStatus(String txId) { if(txId.startsWith("spnull")) { return false; } else { return true; } } } } 4) MainClass.java ================== package Interface.IO.Java.Pack; public class MainClass { public static void main(String[] args) { // creating the object for PaypalProcessor PaypalProcessor paypal = new PaypalProcessor(); double amount = 10000.0; if(paypal.paymentStatus(paypal.processPayment(amount))) { System.out.println(amount + ": paid through paypal."); } else { System.out.println(amount + " : is invalid."); } // System.out.println("====================================="); String line = "=".repeat(50); System.out.println(line); StripeProcessor stripe = new StripeProcessor(); double fund = 19999.0; if(stripe.paymentStatus(stripe.processPayment(fund))) { System.out.println(fund+" : paid through stripe process."); } else { System.out.println(fund+" : is invalid"); } } } ============================================================== Anonymous Inner Class: ====================== What is anonymous? =================== package JavaDemo.IO.Pack; class ClassA{ void m1() { System.out.println("Hello"); } } public class MainClass { public static void main(String[] args) { ClassA ca = new ClassA(); // named object ca.m1(); new ClassA().m1(); // anonymous object or nameless object } } Note: ===== ==> If a class with only one method, we can be instantiated with nameless ==> Anonymous object. ==> If a class with more than one method, we can be instantiated with named object. Anonymous Inner Class: ====================== interface MyInter{ void f1(); void f2(); } class Demo{ void m1(MyInter mi){ } } public class Test{ public static void main(String[] args) { Demo demo = new Demo(); demo.m1(new MyInter(){ public void f1(){ } public void f2(){ }); } } ==> when without implements the class if we can create an object for interface reference in a class is called as "Anonymous class" ======================================================= Method Parameter Passing Techniques: ==================================== 1) pass by value technique: =========================== class ClassA{ def m1(int x) { x = x + 20; } } public MainClass{ public static void main(String[] args){ ClassA ca = new ClassA(); int p = 100; ca.m1(p); System.out.println(p); } } 2) Pass by Reference: ====================== class Item{ double price; } class ClassA{ void increment(Item item){ item.price = item.price + 2000.0; } } public class MainClass{ public static void main(String[] args) { ClassA ca = new ClassA(); Item it = new Item(); it.price = 5000.0; ca.increment(it.price); System.out.println(it.price); } } ============================================================== class Item{ double price; } class ClassA{ void increment(Item item){ Item it = new Item(); item.price = item.price + 2000.0; } } public class MainClass{ public static void main(String[] args) { ClassA ca = new ClassA(); Item it = new Item(); it.price = 5000.0; ca.increment(it.price); System.out.println(it.price); } }