Java 17+ Interview Question 🔥 | Sealed Interfaces Explained Imagine you have a Payment interface implemented by UPIPayment and CardPayment. Everything is fine until another developer adds a CashPayment class that also implements it — but your client doesn’t want that. How do you restrict which classes can implement the Payment interface? Before Java 17, there was no clean way to enforce this. Solution: Use the sealed keyword (introduced in Java 17) with the permits clause. ————————— sealed interface Payment permits UPIPayment, CardPayment { } final class UPIPayment implements Payment { } final class CardPayment implements Payment { } // This will now give a compilation error // class CashPayment implements Payment { } —————————- Key Rules: • Only the classes listed in permits can implement the sealed interface. • Every implementing class must be explicitly marked as: • final → cannot be extended further • sealed → can define its own permitted subclasses • non-sealed → can be freely extended You can also combine this with records (which are implicitly final). This feature gives you full control over the inheritance hierarchy at compile time — no more unexpected implementations in large codebases. What would you choose for UPIPayment — final, sealed, or non-sealed? And why does a record work without explicitly adding final? Drop your thoughts in the comments 👇 #Java #Java17 #SealedInterfaces #JavaInterviewQuestions #BackendDevelopment #ProgrammingTips #AI #ML
Java 17 Sealed Interfaces: Restricting Implementations
More Relevant Posts
-
🌟 Hello Shining Stars!!! 🙏 💡 Java Type Promotion Hierarchy (Must-Know for Developers) Understanding type promotion is key to avoiding subtle bugs in Java 👇 🔼 Hierarchy (Widening Conversion): byte → short → int → long → float → double char → int → long → float → double ⚡ Golden Rules: 👉 byte, short, and char are automatically promoted to int in expressions 👉 Result = largest data type in the expression 👉 ✅ Promotion (widening) is automatic 👉 ❌ De-promotion (narrowing) is NOT automatic — requires explicit casting 🚨 Edge Case Examples (Tricky but Important): byte a = 10; byte b = 20; byte c = a + b; // ❌ Compilation Error // a + b becomes int → cannot store in byte without casting int x = 130; byte b = (byte) x; // ⚠️ Explicit cast (data loss) // Output will be -126 due to overflow char ch = 'A'; System.out.println(ch + 1); // Output: 66 // 'A' → 65 → promoted to int 🧠 Method vs Constructor Promotion (Important Interview Point): void test(int x) { System.out.println("int method"); } void test(double x) { System.out.println("double method"); } test(10); // Calls int method (exact match preferred over promotion) 👉 In methods, Java allows type promotion during overload resolution 👉 But constructors don’t “prefer” promotion the same way — exact match is prioritized, and ambiguous cases can lead to compilation errors 🎯 Takeaway: Java silently promotes smaller types, but it never automatically demotes them — and overload resolution can surprise you! #Java #Programming #Developers #Coding #InterviewPrep #TechTips 👍 Like | 🔁 Repost | 🔄 Share | 💬 Comment | 🔔 Follow | 🤝 Connect to grow together
To view or add a comment, sign in
-
⚡ Lambdas & Functional Interfaces in Java What are they? Lambda expressions = short way to write anonymous functions. Functional Interface = interface with only one abstract method. 💡 Why use them? 1. Cleaner & less boilerplate code 2. Improves readability 3. Core for Streams & modern Java APIs 4. Encourages functional-style programming 🧩 Example Without Lambda: Runnable r = new Runnable() { public void run() { System.out.println("Running..."); } }; With Lambda: Runnable r = () -> System.out.println("Running..."); 🎯 Custom Functional Interface @FunctionalInterface interface Calculator { int operate(int a, int b); } Calculator add = (a, b) -> a + b; System.out.println(add.operate(2, 3)); // 5 🔁 Common Built-in Functional Interfaces 1. Predicate<T> → boolean result 2. Function<T, R> → transform input → output 3. Consumer<T> → takes input, no return 4. Supplier<T> → returns value, no input ⚙️ Flow Input → Lambda → Functional Interface → Output 🧠 Rule of Thumb If your interface has one method, think → "Can I replace this with a lambda?" 👉 If you are preparing for Java backend interviews, connect & follow - I share short, practical backend concepts regularly. #Java #SpringBoot #Backend #FunctionalProgramming #Coding
To view or add a comment, sign in
-
-
🔥 Day 14: Immutable Class (How String is Immutable in Java) One of the most important concepts in Java — especially for interviews 👇 🔹 What is an Immutable Class? 👉 Definition: An immutable class is a class whose objects cannot be changed once created. 🔹 Example: String String s = "Hello"; s.concat(" World"); System.out.println(s); // Hello (not changed) 👉 Why Because String is immutable 🔹 How String Becomes Immutable? ✔ String class is final (cannot be extended) ✔ Internal data is private & final ✔ No methods modify the original object ✔ Any change creates a new object 🔹 Behind the Scenes String s1 = "Hello"; String s2 = s1.concat(" World"); System.out.println(s1); // Hello System.out.println(s2); // Hello World 👉 s1 remains unchanged 👉 s2 is a new object 🔹 Why Immutability is Important? ✔ Thread-safe (no synchronization needed) ✔ Security (safe for sharing data) ✔ Caching (String Pool optimization) ✔ Reliable & predictable behavior 🔹 How to Create Your Own Immutable Class? ✔ Make class final ✔ Make fields private final ✔ No setters ✔ Initialize via constructor only ✔ Return copies of mutable objects 🔹 Real-Life Analogy 📦 Like a sealed box — once created, you cannot change what’s inside. 💡 Pro Tip: Use immutable objects for better performance and safety in multi-threaded applications. 📌 Final Thought: "Immutability = Safety + Simplicity + Performance" #Java #Immutable #String #Programming #JavaDeveloper #Coding #InterviewPrep #Day14
To view or add a comment, sign in
-
-
Java Interview Question That Confuses Almost Everyone (Including Me) “Is Java pass by value or pass by reference?” Here’s the clarity I finally reached: Java is ALWAYS pass by value. No exceptions. But the confusion begins when we deal with objects. What actually happens with objects? When you pass an object to a method: Java passes a copy of the reference (address) Both references point to the same object in memory Two key scenarios: ✔ Modify object data → Changes are visible outside void modify(Test t) { t.x = 50; } Because both references point to the same object. ❌ Change the reference → No effect outside void change(Test t) { t = new Test(); t.x = 100; } Because now only the copied reference points to a new object. The mental model that clicked for me: Change object data → visible Change reference → no impact outside Final takeaway: Java is pass by value — but for objects, the value being passed is a reference. A huge thanks to PW Institute of Innovation and Syed Zabi Ulla sir for explaining this concept so thoroughly and clearly. #Java #SoftwareEngineering #Coding #ProgrammingConcepts #JavaDeveloper #TechInterviews#Java #Programming #SoftwareDevelopment #JavaDeveloper #CodingTips #Tech #BackendDevelopment #LearnToCode
To view or add a comment, sign in
-
-
🧠 Most Java developers use the JVM every day. But very few can answer this in an interview: 👉 "Where does an object actually live in memory?" Here’s the JVM memory model explained simply 👇 📦 𝗛𝗲𝗮𝗽 — shared across all threads This is where ALL your objects live. Two zones matter: 🟢 𝗬𝗼𝘂𝗻𝗴 𝗚𝗲𝗻𝗲𝗿𝗮𝘁𝗶𝗼𝗻 — where new objects are born → Eden space fills up → Minor GC runs → survivors move to S0/S1 → Minor GC is FAST — 90%+ of objects die young 🔵 𝗢𝗹𝗱 𝗚𝗲𝗻𝗲𝗿𝗮𝘁𝗶𝗼𝗻 — where long-lived objects live → Objects that survive multiple Minor GCs get promoted here → Major GC cleans this → this causes the dreaded stop-the-world pauses 🧵 𝗦𝘁𝗮𝗰𝗸 — private to each thread → Stores method frames and local variables → Auto-cleaned when a method returns — no GC needed → StackOverflowError = you have infinite recursion somewhere 🧬 𝗠𝗲𝘁𝗮𝘀𝗽𝗮𝗰𝗲 — replaced PermGen in Java 8 → Stores class metadata, bytecode, static variables, String Pool → Lives in native memory — grows dynamically → This is why the classic "PermGen space" OOM disappeared in Java 8 🎯 𝗧𝗵𝗲 𝗶𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗾𝘂𝗲𝘀𝘁𝗶𝗼𝗻 𝘁𝗵𝗮𝘁 𝗰𝗮𝘁𝗰𝗵𝗲𝘀 𝗲𝘃𝗲𝗿𝘆𝗼𝗻𝗲: 👉 "Where does a local variable live vs the object it references?" ✔️ The reference lives on the Stack ✔️ The actual object lives on the Heap Simple. But most people get it wrong under pressure. Understanding this one diagram makes debugging memory issues, GC tuning, and OOM errors 10x easier. Save this. You’ll need it. 🙌 👉 Follow Aman Mishra for more backend insights,content, and interview-focused tech breakdowns!🚀 𝗜'𝘃𝗲 𝗰𝗼𝘃𝗲𝗿𝗲𝗱 𝘁𝗵𝗶𝘀 𝗶𝗻 𝗱𝗲𝗽𝘁𝗵, 𝗚𝗖 𝘁𝘂𝗻𝗶𝗻𝗴, 𝗝𝗩𝗠 𝗳𝗹𝗮𝗴𝘀, 𝗮𝗻𝗱 𝗿𝗲𝗮𝗹 𝗶𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗤&𝗔𝘀 — 𝗶𝗻 𝗺𝘆 𝗝𝗮𝘃𝗮 𝗖𝗼𝗿𝗲 & 𝗔𝗱𝘃𝗮𝗻𝗰𝗲𝗱 𝗜𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗠𝗮𝘀𝘁𝗲𝗿𝘆 𝗚𝘂𝗶𝗱𝗲.𝗢𝗳𝗳𝗲𝗿𝗶𝗻𝗴 𝟱𝟬% 𝗼𝗳𝗳 𝗳𝗼𝗿 𝗮 𝗹𝗶𝗺𝗶𝘁𝗲𝗱 𝘁𝗶𝗺𝗲! 👇 𝗚𝗲𝘁 𝘁𝗵𝗲 𝗴𝘂𝗶𝗱𝗲 𝗵𝗲𝗿𝗲: https://lnkd.in/gn3AG7Cm 𝗨𝘀𝗲 𝗰𝗼𝗱𝗲 𝗝𝗔𝗩𝗔𝟱𝟬
To view or add a comment, sign in
-
-
💻 Exception Handling in Java — Write Robust Code 🚀 Handling errors properly is what separates basic code from production-ready applications. This visual breaks down Exception Handling in Java in a simple yet technical way 👇 🧠 What is an Exception? An exception is an unexpected event that occurs during program execution and disrupts the normal flow. 👉 Example: Division by zero → ArithmeticException 🔍 Exception Hierarchy: Object ↳ Throwable ↳ Error (System-level, not recoverable) ↳ Exception (Can be handled) ✔ Checked Exceptions (Compile-time) ✔ Unchecked Exceptions (Runtime) ⚡ Types of Exceptions: ✔ Checked → Must be handled (IOException, SQLException) ✔ Unchecked → Runtime errors (NullPointerException, ArrayIndexOutOfBoundsException) 🔄 Try-Catch-Finally Flow: 1️⃣ try → Code that may cause exception 2️⃣ catch → Handle the exception 3️⃣ finally → Always executes (cleanup resources) 🛠 Throw vs Throws: throw → Explicitly throw an exception throws → Declare exceptions in method signature 🧪 Custom Exceptions: Create your own exceptions for business logic validation → improves readability & control ⚠️ Common Exceptions: ArithmeticException NullPointerException ArrayIndexOutOfBoundsException IOException 🔥 Best Practices: ✔ Handle specific exceptions (avoid generic catch) ✔ Use meaningful error messages ✔ Always release resources (finally / try-with-resources) ✔ Don’t ignore exceptions silently ✔ Use custom exceptions where needed 🎯 Key takeaway: Exception handling is not just about avoiding crashes — it’s about building reliable, maintainable, and user-friendly applications. #Java #ExceptionHandling #Programming #SoftwareEngineering #BackendDevelopment #Coding #Learning
To view or add a comment, sign in
-
-
Java Concept Check — Answer Explained 💡 Yesterday I posted a question: Which combination of Java keywords cannot be used together while declaring a class? Options were: A) public static B) final abstract C) public final D) abstract class ✅ Correct Answer: B) final abstract Why? In Java: 🔹 abstract class - Cannot be instantiated (no direct object creation) - Must be extended by another class Example: abstract class A { } 🔹 final class - Cannot be extended by any other class - Object creation is allowed Example: final class B { } The contradiction If we combine them: final abstract class A { } We create a conflict: - "abstract" → class must be inherited - "final" → class cannot be inherited Because these two rules contradict each other, Java does not allow this combination, resulting in a compile-time error. Thanks to everyone who participated in the poll 👇 Did you get the correct answer? #Java #BackendDevelopment #JavaDeveloper #Programming
To view or add a comment, sign in
-
One Java concept that helped me better understand sorting and comparing objects is Comparator & Comparable. In Java, both Comparable and Comparator are used to define how objects should be sorted. Comparable allows a class to define its default sorting logic using the "compareTo()" method. Comparator, on the other hand, lets us create custom sorting rules using the "compare()" method, which is useful when we want to sort objects in different ways. While exploring backend development, I noticed this concept is useful when sorting collections of objects such as employees, products, or students based on attributes like name, price, or ID. It helps organise data clearly and makes applications more flexible. This topic also appears frequently in Java interviews, because it checks whether developers understand object comparison, sorting collections, and writing cleaner, reusable logic. For me, learning the difference between "Comparable and Comparator" made working with collections much easier and more practical. 🧠 When sorting objects in Java projects, do you usually prefer using Comparable or Comparator, and why? 🙂 #Java #CoreJava #JavaCollections #Comparator #Comparable #BackendDevelopment #JavaDeveloper #DeveloperLearning
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development