Abstract methods let you define a method without giving its details. This means subclasses must provide their own version of the method.
Abstract methods in Java
Start learning this pattern below
Jump into concepts and practice - no test required
abstract class ClassName { abstract returnType methodName(parameters); }
The class containing an abstract method must be declared abstract.
Abstract methods have no body (no curly braces, just a semicolon).
abstract class Animal { abstract void makeSound(); }
abstract class Shape { abstract double area(); }
abstract class Vehicle { abstract void startEngine(); } class Car extends Vehicle { @Override void startEngine() { System.out.println("Car engine started"); } }
This program shows an abstract class Animal with an abstract method makeSound. Dog and Cat classes provide their own sounds. The sleep method is shared.
abstract class Animal { abstract void makeSound(); void sleep() { System.out.println("Animal is sleeping"); } } class Dog extends Animal { @Override void makeSound() { System.out.println("Dog barks"); } } class Cat extends Animal { @Override void makeSound() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal dog = new Dog(); Animal cat = new Cat(); dog.makeSound(); dog.sleep(); cat.makeSound(); cat.sleep(); } }
Time complexity: Abstract methods themselves do not affect time complexity; it depends on the subclass implementation.
Space complexity: No extra space is used by abstract methods alone.
Common mistake: Forgetting to implement all abstract methods in subclasses causes compile errors.
Use abstract methods when you want to force subclasses to provide specific behavior, unlike normal methods that can have default behavior.
Abstract methods have no body and must be implemented by subclasses.
Classes with abstract methods must be declared abstract.
Abstract methods help design flexible and reusable code by defining a contract for subclasses.
Practice
abstract methods in Java is correct?Solution
Step 1: Understand abstract method definition
Abstract methods declare a method signature without a body, forcing subclasses to provide implementation.Step 2: Check each option against the definition
Abstract methods have no body and must be implemented by subclasses. correctly states abstract methods have no body and must be implemented by subclasses. Options A, B, and D are incorrect because abstract methods cannot have bodies, are used in abstract classes (not only interfaces), and cannot be private or final.Final Answer:
Abstract methods have no body and must be implemented by subclasses. -> Option AQuick Check:
Abstract method = no body, must implement [OK]
- Thinking abstract methods can have a body
- Confusing abstract methods with interface methods
- Believing abstract methods can be private or final
Solution
Step 1: Recall abstract method syntax
Abstract methods must be declared with the keywordabstract, have no body, and specify the return type and method name.Step 2: Evaluate each option
public abstract void display(); correctly declares an abstract method with no body. public void abstract display(); incorrectly placesabstractaftervoid. abstract public void display() {} incorrectly provides a method body ({}). void abstract display(); misses the access modifier and placesabstractincorrectly.Final Answer:
public abstract void display(); -> Option DQuick Check:
abstract method = abstract + no body [OK]
- Adding method body {} to abstract methods
- Placing 'abstract' keyword incorrectly
- Omitting access modifiers (though optional)
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();
}
}Solution
Step 1: Understand class hierarchy and method implementation
ClassAnimalis abstract with an abstract methodsound(). ClassDogextendsAnimaland provides implementation forsound()that prints "Bark".Step 2: Analyze main method execution
Inmain, anAnimalreference points to aDogobject. Callingsound()invokesDog's implementation, printing "Bark".Final Answer:
Bark -> Option BQuick Check:
Abstract method implemented in subclass = prints subclass output [OK]
- Expecting abstract method to run without implementation
- Confusing abstract class instantiation
- Thinking abstract method prints default text
abstract class Shape {
abstract void draw();
}
class Circle extends Shape {
void draw() {
System.out.println("Drawing Circle");
}
}
class Square extends Shape {
}
public class Test {
public static void main(String[] args) {
Shape s = new Square();
s.draw();
}
}Solution
Step 1: Check abstract method implementation in subclasses
ClassShapehas abstract methoddraw().Circlecorrectly implements it.Squaredoes not implementdraw().Step 2: Understand consequences of missing implementation
SinceSquaredoes not implement the abstract method, it must be declared abstract or implement the method. Otherwise, compilation error occurs.Final Answer:
Class Square must implement the abstract method draw() -> Option CQuick Check:
Subclass must implement all abstract methods [OK]
- Forgetting to implement abstract methods in subclasses
- Trying to instantiate abstract classes directly
- Misunderstanding abstract method requirements
startEngine() behavior. Which approach using abstract methods is best to ensure this?Solution
Step 1: Understand requirement for mandatory implementation
The program requires each vehicle type to provide its ownstartEngine()behavior, so subclasses must be forced to implement this method.Step 2: Evaluate options for enforcing implementation
Create an abstract class Vehicle with an abstract method startEngine(), then subclass it for each vehicle type implementing startEngine(). uses an abstract class with an abstract method, forcing subclasses to implementstartEngine(). Create a concrete class Vehicle with a startEngine() method that prints a generic message, and override it in subclasses. provides a generic method that can be overridden but does not force implementation. Create an interface Vehicle with a default startEngine() method, and override it in subclasses if needed. uses an interface with a default method, which subclasses may skip overriding. Create a class Vehicle with a private startEngine() method and call it from subclasses. uses a private method, which is not accessible to subclasses.Final Answer:
Create an abstract class Vehicle with an abstract method startEngine(), then subclass it for each vehicle type implementing startEngine(). -> Option AQuick Check:
Abstract method forces subclass implementation [OK]
- Using concrete methods without forcing override
- Using private methods inaccessible to subclasses
- Relying on default interface methods without enforcement
