Skip to main content

Posts

Socket (TCP & UDP) communication in Java

Socket communication in Java enables communication between two endpoints over a network. There are two main types of sockets: TCP sockets and UDP sockets. Let's explain both types with examples: TCP Socket Communication: 1. **Server Side**:    - The server creates a `ServerSocket` object to listen for incoming connections on a specific port.    - When a client connects, the server accepts the connection and creates a `Socket` object to communicate with the client.    - The server reads from and writes to the socket's input and output streams to communicate with the client. import java.io.*; import java.net.*; public class TCPServer {     public static void main(String[] args) throws IOException {         ServerSocket serverSocket = new ServerSocket(12345);         System.out.println("Server started. Waiting for client...");         Socket clientSocket = serverSocket.accept();         System.out.println("Client connected.");         BufferedReader in = new Bu

Handling Multilevel Constructors – super Keyword

In Java, when dealing with multilevel inheritance and constructors, the `super` keyword plays a crucial role. The `super` keyword is used to call the constructor of the immediate superclass from within the subclass constructor. This is essential for initializing the inherited members of the superclass before initializing the members of the subclass. Let's illustrate how `super` keyword is used to handle multilevel constructors: class Animal {     String type;     Animal(String type) {         this.type = type;         System.out.println("Animal constructor called");     }     void eat() {         System.out.println("Animal is eating");     } } class Dog extends Animal {     String breed;     Dog(String type, String breed) {         super(type); // Calling superclass constructor         this.breed = breed;         System.out.println("Dog constructor called");     }     void bark() {         System.out.println("Dog is barking");     } } class L

Multilevel Inheritance – Method Overriding

Multilevel inheritance and method overriding are two important concepts in object-oriented programming, especially in Java. Let's discuss each of them: Multilevel Inheritance: Multilevel inheritance refers to a scenario where a derived class inherits properties and behavior from a base class, and another class then inherits from this derived class. This creates a chain of inheritance, where each class inherits from the one preceding it. For example: class Animal {     void eat() {         System.out.println("Animal is eating");     } } class Dog extends Animal {     void bark() {         System.out.println("Dog is barking");     } } class Labrador extends Dog {     void color() {         System.out.println("Labrador is golden in color");     } } public class Main {     public static void main(String[] args) {         Labrador labrador = new Labrador();         labrador.eat();   // Inherited from Animal         labrador.bark();  // Inherited from Dog  

Constructor Inheritance

In Java, constructors are not directly inherited by subclasses like other methods and fields. However, there is a concept called constructor chaining or implicit constructor invocation, which allows subclasses to implicitly call a constructor of the superclass before executing their own constructor code. Here's how constructor inheritance works in Java: 1. Implicit Constructor Invocation:    - When you create an instance of a subclass, Java automatically invokes a constructor of the superclass before executing the constructor code of the subclass.    - If the subclass constructor does not explicitly call a superclass constructor using `super(...)`, Java will automatically call the no-argument constructor of the superclass. 2. Explicit Constructor Invocation:    - If the superclass does not have a no-argument constructor, or if the subclass constructor wants to call a specific superclass constructor with arguments, you must explicitly invoke the superclass constructor using `super(.

Inheriting Data members and Methods

 In Java, when a class inherits from another class, it inherits both the data members (fields or variables) and methods (functions or behaviors) of the parent class. This process is known as inheritance and is a fundamental concept of object-oriented programming. Inheriting Data Members: - Inherited data members include fields or variables declared in the parent class. - These data members are accessible in the subclass just like they are in the parent class. - Subclasses can use inherited data members directly or override them if necessary. Inheriting Methods: - Inherited methods include all the public and protected methods defined in the parent class. - Subclasses can use inherited methods directly, extend their functionality, or override them to provide custom implementations. - Private methods in the parent class are not inherited and are not accessible in the subclass. Example: Consider a simple example to illustrate inheritance in Java: // Parent class class Vehicle {     String

Use of Inheritance in Java

Use of Inheritance in Java: Inheritance is a fundamental concept in object-oriented programming (OOP) languages like Java. It allows a class (subclass or derived class) to inherit properties and behavior from another class (superclass or base class). This facilitates code reuse, promotes modularity, and enables the creation of hierarchical relationships between classes. Example: Let's consider a real-life analogy to understand inheritance better. Suppose we have a class hierarchy representing different vehicles: 1. Vehicle (Base Class):    - Properties: make, model, year    - Behaviors: start(), stop(), accelerate(), brake() 2. Car (Subclass of Vehicle):    - Additional Properties: numDoors, color    - Additional Behaviors: honk() 3. Truck (Subclass of Vehicle):    - Additional Properties: cargoCapacity    - Additional Behaviors: loadCargo(), unloadCargo() Code Example: // Base class representing a Vehicle class Vehicle {     String make;     String model;     int year;     void st

The @Override annotation

The `@Override` annotation is used in Java to indicate that a method in a subclass is overriding a method with the same signature in its superclass. It is not mandatory to use `@Override`, but it helps in detecting errors during compilation if the method signature does not match any method in the superclass. Here are some key points about `@Override`: 1. Purpose: It provides compile-time checking that a method is indeed overriding a method from a superclass. If there is a mismatch in the method signature (e.g., misspelling of method name, incorrect parameters), the compiler will generate an error. 2. Usage: `@Override` is placed immediately before the method declaration in the subclass that is intended to override a method in the superclass. 3. Compatibility: `@Override` annotation was introduced in Java 5. It can only be used with methods that are overriding a superclass method. If a method is not overriding a superclass method, using `@Override` will result in a compilation error.