Abstraction is the fundamental OOP principle that hides complex internal implementation details and exposes only the essential operational features to the outside world. In Java, abstraction is achieved via Abstract Classes (0% to 100% partial abstraction) and Interfaces (100% pure abstraction).
An abstract class is a class declared with the abstract keyword. It represents a conceptual base entity that cannot be instantiated directly. An abstract class can contain:
super().// Abstract Superclass
abstract class PaymentGateway {
protected double amount;
// Constructor in abstract class
public PaymentGateway(double amount) {
this.amount = amount;
}
// Concrete Method: Shared auditing logic
public void logTransaction(String status) {
System.out.println("[AUDIT LOG] Transaction for $" + amount + " Status: " + status);
}
// Abstract Method: Contract that subclasses MUST implement
public abstract boolean processPayment();
}
// Concrete Subclass 1: Credit Card
class CreditCardPayment extends PaymentGateway {
private String cardNumber;
public CreditCardPayment(double amount, String cardNum) {
super(amount);
this.cardNumber = cardNum;
}
@Override
public boolean processPayment() {
System.out.println("Contacting Visa/Mastercard network for Card: " + cardNumber);
logTransaction("SUCCESS_CREDIT_CARD");
return true;
}
}
// Concrete Subclass 2: UPI
class UpiPayment extends PaymentGateway {
private String upiId;
public UpiPayment(double amount, String upiId) {
super(amount);
this.upiId = upiId;
}
@Override
public boolean processPayment() {
System.out.println("Sending payment request to UPI VPA: " + upiId);
logTransaction("SUCCESS_UPI");
return true;
}
}
Exam Question: "If a class contains even one abstract method, must the entire class be declared abstract?"
Answer: Yes! If a class declares or inherits any abstract method without providing an implementation body, the class must explicitly be marked with the abstract keyword. Otherwise, the compiler throws an error: class must be declared abstract or implement abstract method.
Now let us explore Java Interfaces, multiple inheritance, and modern default/static methods. Proceed to: Java Interfaces & Default Methods →
Accelerate your Java mastery by studying these tightly connected core tutorials:
100% full abstraction contracts.
Implementing abstract methods.
Subclassing abstract superclasses.
Abstraction concept summary.