Bird
Raised Fist0
Javaprogramming~20 mins

Inheritance limitations in Java - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
πŸŽ–οΈ
Inheritance Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of method call with final class inheritance
What is the output of this Java code?
Java
final class Animal {
    void sound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound();
    }
}
ARuntime error
BAnimal sound
CDog barks
DCompilation error due to Dog extending final class Animal
Attempts:
2 left
πŸ’‘ Hint
Recall what the 'final' keyword means when applied to a class.
❓ Predict Output
intermediate
2:00remaining
Output when overriding a final method
What happens when this Java code is compiled and run?
Java
class Vehicle {
    final void start() {
        System.out.println("Vehicle started");
    }
}

class Car extends Vehicle {
    void start() {
        System.out.println("Car started");
    }
}

public class Test {
    public static void main(String[] args) {
        Vehicle v = new Car();
        v.start();
    }
}
ACar started
BCompilation error due to overriding final method
CRuntime error
DVehicle started
Attempts:
2 left
πŸ’‘ Hint
Check if final methods can be overridden.
πŸ”§ Debug
advanced
2:00remaining
Identify the inheritance limitation causing error
This code tries to compile but fails. What is the cause of the error?
Java
interface Flyer {
    void fly();
}

class Bird implements Flyer {
    public void fly() {
        System.out.println("Bird is flying");
    }
}

class Penguin extends Bird {
    public void fly() {
        System.out.println("Penguins can't fly");
    }
}

public class Test {
    public static void main(String[] args) {
        Flyer f = new Penguin();
        f.fly();
    }
}
ACompilation error because Penguin cannot override fly() from Bird
BPenguin cannot override fly() because Bird already implements Flyer
CNo error; output is 'Penguins can't fly'
DRuntime error due to Penguin fly() method
Attempts:
2 left
πŸ’‘ Hint
Consider if overriding interface methods is allowed.
πŸ“ Syntax
advanced
2:00remaining
Which code causes a compilation error due to multiple inheritance?
Java does not support multiple inheritance with classes. Which option causes a compilation error?
A
class A {}
class B {}
class C extends A, B {}
B
interface A {}
interface B {}
class C implements A, B {}
C
interface A {}
class B {}
class C extends B implements A {}
D
interface A {}
interface B {}
interface C extends A, B {}
Attempts:
2 left
πŸ’‘ Hint
Check how Java handles multiple inheritance with classes and interfaces.
πŸš€ Application
expert
3:00remaining
How many methods can a class inherit from multiple interfaces with same default method?
Given these interfaces and class, how many distinct default methods named greet() does class Friendly inherit?
Java
interface A {
    default void greet() {
        System.out.println("Hello from A");
    }
}

interface B {
    default void greet() {
        System.out.println("Hello from B");
    }
}

class Friendly implements A, B {
    public void greet() {
        A.super.greet();
        B.super.greet();
        System.out.println("Hello from Friendly");
    }
}

public class Test {
    public static void main(String[] args) {
        Friendly f = new Friendly();
        f.greet();
    }
}
ATwo default greet() methods inherited, one from A and one from B
BOne default greet() method inherited from interface B
COne default greet() method inherited from interface A
DNo default greet() methods inherited because Friendly overrides greet()
Attempts:
2 left
πŸ’‘ Hint
Think about how Java handles default methods with same signature in multiple interfaces.

Practice

(1/5)
1.

Which of the following is not allowed in Java inheritance?

  • Extending multiple classes
  • Extending a final class
  • Overriding a final method
  • All of the above
easy
A. Extending multiple classes
B. Extending a final class
C. Overriding a final method
D. All of the above

Solution

  1. Step 1: Understand Java inheritance rules

    Java supports only single inheritance of classes, so extending multiple classes is not allowed.
  2. Step 2: Check restrictions on final classes and methods

    Classes declared as final cannot be extended, and final methods cannot be overridden.
  3. Final Answer:

    All of the above -> Option D
  4. Quick Check:

    Java disallows multiple inheritance, final class extension, and final method overriding [OK]
Hint: Remember: final means no inheritance or override allowed [OK]
Common Mistakes:
  • Thinking Java supports multiple class inheritance
  • Trying to override final methods
  • Assuming final classes can be extended
2.

Which of the following class declarations is correct in Java?

public class Animal {}
public class Dog extends Animal {}
public class Cat extends Dog, Animal {}
easy
A. All classes are correctly declared
B. Only Dog class declaration is correct
C. Cat class declaration is correct
D. Animal class declaration is incorrect

Solution

  1. Step 1: Check single inheritance rule

    Java allows a class to extend only one class. Dog extends Animal correctly.
  2. Step 2: Analyze Cat class declaration

    Cat tries to extend Dog and Animal simultaneously, which is invalid syntax in Java.
  3. Final Answer:

    Only Dog class declaration is correct -> Option B
  4. Quick Check:

    Single inheritance means one parent only [OK]
Hint: Java classes extend only one class at a time [OK]
Common Mistakes:
  • Trying to extend multiple classes in one declaration
  • Confusing interfaces with classes for multiple inheritance
  • Assuming all class declarations are valid
3.

What will be the output of the following Java code?

final class Vehicle {
    void start() { System.out.println("Vehicle started"); }
}

class Car extends Vehicle {
    void start() { System.out.println("Car started"); }
}

public class Test {
    public static void main(String[] args) {
        Car c = new Car();
        c.start();
    }
}
medium
A. Compilation error
B. Vehicle started
C. Runtime error
D. Car started

Solution

  1. Step 1: Identify final class usage

    The class Vehicle is declared final, so it cannot be extended by any class including Car.
  2. Step 2: Check inheritance and compilation

    Since Car tries to extend final Vehicle, the compiler will throw an error.
  3. Final Answer:

    Compilation error -> Option A
  4. Quick Check:

    final class cannot be subclassed [OK]
Hint: final classes cannot be extended, causing compile errors [OK]
Common Mistakes:
  • Assuming final class can be extended
  • Expecting runtime error instead of compile error
  • Thinking method overriding causes error here
4.

Find the error in the following code snippet:

class Parent {
    final void show() {
        System.out.println("Parent show");
    }
}

class Child extends Parent {
    void show() {
        System.out.println("Child show");
    }
}
medium
A. Parent class cannot have final methods
B. Child class must declare show() as final
C. Child class cannot override final method show()
D. No error, code is valid

Solution

  1. Step 1: Understand final method behavior

    Methods declared final in a parent class cannot be overridden in child classes.
  2. Step 2: Analyze Child class method

    Child class tries to override final method show(), which causes a compile-time error.
  3. Final Answer:

    Child class cannot override final method show() -> Option C
  4. Quick Check:

    final methods block overriding [OK]
Hint: final methods cannot be overridden in subclasses [OK]
Common Mistakes:
  • Thinking final methods can be overridden
  • Assuming no error in overriding final methods
  • Confusing final methods with abstract methods
5.

You want to prevent any class from extending your class SecureData, but still allow other classes to use its methods. Which is the best way to do this?

hard
A. Declare the class SecureData as final
B. Make all methods in SecureData final
C. Make SecureData an abstract class
D. Declare SecureData methods as private

Solution

  1. Step 1: Understand the effect of final class

    Declaring a class as final prevents any other class from extending it, but allows normal usage of its methods.
  2. Step 2: Evaluate other options

    Making methods final prevents overriding but not extending; abstract class requires subclassing; private methods are inaccessible outside the class.
  3. Final Answer:

    Declare the class SecureData as final -> Option A
  4. Quick Check:

    final class blocks inheritance but allows usage [OK]
Hint: Use final class to block inheritance but allow method use [OK]
Common Mistakes:
  • Confusing final methods with final classes
  • Using abstract class which requires subclassing
  • Making methods private, blocking access