Bird
Raised Fist0
Javaprogramming~20 mins

Abstract vs concrete classes in Java - Practice Questions

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
πŸŽ–οΈ
Abstract Class Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of abstract class method call
What is the output of the following Java code?
Java
abstract class Animal {
    abstract void sound();
}

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

public class Main {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound();
    }
}
ABark
BAnimal sound
CCompilation error: cannot instantiate abstract class
DRuntime error
Attempts:
2 left
πŸ’‘ Hint
Look at which class is instantiated and which method is called.
❓ Predict Output
intermediate
2:00remaining
What happens when instantiating an abstract class?
What error does the following code produce?
Java
abstract class Vehicle {
    abstract void move();
}

public class Main {
    public static void main(String[] args) {
        Vehicle v = new Vehicle();
        v.move();
    }
}
ARuntime error: NullPointerException
BCompilation error: cannot instantiate abstract class
CNo output, program runs successfully
DCompilation error: method move() not implemented
Attempts:
2 left
πŸ’‘ Hint
Can you create an object of an abstract class directly?
❓ Predict Output
advanced
2:00remaining
Output with abstract and concrete class methods
What is the output of this Java program?
Java
abstract class Shape {
    void display() {
        System.out.println("Shape display");
    }
    abstract void draw();
}

class Circle extends Shape {
    void draw() {
        System.out.println("Circle draw");
    }
    void display() {
        System.out.println("Circle display");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape s = new Circle();
        s.display();
        s.draw();
    }
}
A
Circle display
Circle draw
B
Shape display
Shape draw
C
Shape display
Circle draw
DCompilation error: cannot override display()
Attempts:
2 left
πŸ’‘ Hint
Which display() method is called? The one in Shape or Circle?
❓ Predict Output
advanced
2:00remaining
Which option causes a compilation error?
Given the abstract class and subclass below, which option will cause a compilation error?
Java
abstract class Device {
    abstract void start();
}

class Phone extends Device {
    void start() {
        System.out.println("Phone starting");
    }
}

public class Main {
    public static void main(String[] args) {
        // Options below
    }
}
ADevice d = new Phone(); d.start();
BPhone p = new Phone(); p.start();
CDevice d = new Device(); d.start();
DDevice d; d = new Phone(); d.start();
Attempts:
2 left
πŸ’‘ Hint
Can you create an instance of an abstract class?
🧠 Conceptual
expert
2:00remaining
Why use abstract classes instead of concrete classes?
Which of the following is the best reason to use an abstract class instead of a concrete class in Java?
ATo improve runtime performance by avoiding method calls
BTo prevent any subclass from overriding methods
CTo allow creating objects directly from the abstract class
DTo provide a common template with some methods implemented and others left for subclasses to define
Attempts:
2 left
πŸ’‘ Hint
Think about what abstract classes allow you to do with methods.

Practice

(1/5)
1. Which statement best describes an abstract class in Java?
easy
A. It is the same as an interface and cannot have any methods with code.
B. It must have all methods fully implemented and can be instantiated.
C. It can have methods without implementation and cannot be instantiated directly.
D. It is a class that can only contain static methods.

Solution

  1. Step 1: Understand abstract class definition

    An abstract class can have methods without implementation (abstract methods) and cannot create objects directly.
  2. Step 2: Compare with other options

    Concrete classes have full method implementations and can be instantiated. Interfaces differ from abstract classes. Static-only classes are unrelated.
  3. Final Answer:

    It can have methods without implementation and cannot be instantiated directly. -> Option C
  4. Quick Check:

    Abstract class = no direct objects [OK]
Hint: Abstract classes can't create objects directly [OK]
Common Mistakes:
  • Thinking abstract classes can be instantiated
  • Confusing abstract classes with interfaces
  • Assuming all methods must be implemented
2. Which of the following is the correct way to declare an abstract class in Java?
easy
A. abstract class Vehicle {}
B. class abstract Vehicle {}
C. Vehicle abstract class {}
D. class Vehicle abstract {}

Solution

  1. Step 1: Recall Java syntax for abstract classes

    The keyword 'abstract' comes before 'class' followed by the class name.
  2. Step 2: Check each option

    Only 'abstract class Vehicle {}' matches correct syntax. The other options have incorrect keyword order.
  3. Final Answer:

    abstract class Vehicle {} -> Option A
  4. Quick Check:

    abstract keyword before class name [OK]
Hint: Put 'abstract' before 'class' keyword [OK]
Common Mistakes:
  • Placing 'abstract' after 'class'
  • Mixing keyword order
  • Omitting 'abstract' keyword
3. What will be the output of the following Java code?
abstract class Animal {
    abstract void sound();
}

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

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound();
    }
}
medium
A. Runtime error
B. Animal sound
C. Compilation error
D. Bark

Solution

  1. Step 1: Understand class hierarchy and method overriding

    Animal is abstract with abstract method sound(). Dog extends Animal and implements sound() printing "Bark".
  2. Step 2: Analyze main method execution

    Animal reference points to Dog object. Calling a.sound() runs Dog's sound(), printing "Bark".
  3. Final Answer:

    Bark -> Option D
  4. Quick Check:

    Abstract method overridden = Dog's output [OK]
Hint: Abstract method calls run subclass implementation [OK]
Common Mistakes:
  • Expecting abstract class method to run
  • Thinking abstract class can be instantiated
  • Confusing compile and runtime errors
4. Identify the error in the following code snippet:
abstract class Shape {
    abstract void draw();
}

class Circle extends Shape {
    // No draw() method implemented
}

public class Test {
    public static void main(String[] args) {
        Circle c = new Circle();
        c.draw();
    }
}
medium
A. Circle must implement the abstract method draw() or be declared abstract.
B. Cannot create object of class Circle.
C. Abstract class Shape cannot have abstract methods.
D. No error, code runs fine.

Solution

  1. Step 1: Check subclass implementation of abstract methods

    Circle extends Shape but does not implement abstract method draw().
  2. Step 2: Understand Java rules for abstract methods

    A concrete class must implement all abstract methods or be declared abstract itself. Circle is concrete but missing draw().
  3. Final Answer:

    Circle must implement the abstract method draw() or be declared abstract. -> Option A
  4. Quick Check:

    Concrete subclass must implement all abstract methods [OK]
Hint: Concrete class must implement all abstract methods [OK]
Common Mistakes:
  • Thinking abstract methods can be skipped
  • Assuming abstract class can't have abstract methods
  • Believing object creation is the error
5. You want to design a system where different types of employees calculate their salary differently. Which approach best uses abstract and concrete classes?
hard
A. Create only concrete classes for each employee type without any abstract class.
B. Create an abstract class Employee with an abstract method calculateSalary(), then create concrete subclasses like Manager and Developer implementing it.
C. Use an interface with no methods and concrete classes implementing it.
D. Create a concrete Employee class with a fixed calculateSalary() method used by all employees.

Solution

  1. Step 1: Identify need for shared rules with different implementations

    Employee types share concept of salary calculation but differ in details.
  2. Step 2: Use abstract class with abstract method

    Abstract class Employee defines calculateSalary() abstractly. Subclasses implement specific logic.
  3. Step 3: Evaluate other options

    Create only concrete classes for each employee type without any abstract class. lacks shared abstraction. Use an interface with no methods and concrete classes implementing it. uses interface with no methods, so no contract. Create a concrete Employee class with a fixed calculateSalary() method used by all employees. fixes salary calculation, no variation.
  4. Final Answer:

    Create an abstract class Employee with an abstract method calculateSalary(), then create concrete subclasses like Manager and Developer implementing it. -> Option B
  5. Quick Check:

    Abstract class sets rules, subclasses do work [OK]
Hint: Abstract class for rules, concrete classes for details [OK]
Common Mistakes:
  • Not using abstraction for shared behavior
  • Using concrete class with fixed method only
  • Interfaces without methods don't enforce contracts