In Java, inheritance is a mechanism by which a class can inherit properties and behaviors (methods and fields) from another class. The class that is being inherited from is called the superclass or base class, and the class that inherits from it is called the subclass or derived class.
Internally, when a subclass inherits from a superclass, it gains access to all the public and protected members of the superclass. This is achieved through a process called subclassing, where the subclass maintains a reference to its superclass.
When an object of a subclass is created, memory is allocated for both the subclass and the superclass. The superclass portion of the object is initialized first, followed by the subclass portion. This ensures that all the fields and methods from the superclass are available to the subclass object.
Additionally, Java uses the concept of method overriding to allow a subclass to provide its own implementation of a method that is already defined in its superclass. This allows for polymorphic behavior, where the same method call can behave differently depending on the type of object it is called on.