Unit 9: Inheritance

Abstract Classes in Java

Introduction to Abstract Classes

Abstract classes are at the heart of object-oriented programming in Java. They embody the concept of abstraction, enabling you to define the essence of a class without specifying its full implementation. This allows for a flexible design where subclasses can provide specific implementations.


Essence of Abstract Classes

What is Abstraction?

Abstraction in programming is the concept of hiding the complex reality while exposing only the necessary parts. In Java, abstract classes are a tool for abstraction.

Abstract classes:

  • Cannot be instantiated on their own.
  • Can have abstract methods (methods without a body).
  • Can also have fully defined methods.

Abstract Classes vs. Interfaces

While both abstract classes and interfaces provide abstraction, they serve different purposes:

  • Abstract classes can have member variables with defined states, while interfaces cannot.
  • A class can inherit from only one abstract class, but can implement multiple interfaces.

Key Insight

Think of an abstract class as a template for other classes. It's like a blueprint that other classes can build upon, but it isn't complete on its own.


Creating and Using Abstract Classes

Declaring an Abstract Class

Use the abstract keyword to declare an abstract class:

abstract class Shape {
    abstract void draw();
}

Extending an Abstract Class

A concrete class (i.e., a non-abstract class) extending an abstract class must provide implementations for all of its abstract methods:

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

Benefits of Abstract Classes

  • Promote code reuse through defined methods in the abstract class.
  • Provide a clear structure for subclasses.
  • Enhance security by preventing the instantiation of an incomplete class.

Remember!

You cannot create an instance of an abstract class. Trying to do so will result in a compile-time error.


Summary

Abstract classes are a powerful tool in Java, allowing for abstraction and promoting code reuse. They define a contract (through abstract methods) that all subclasses must adhere to, ensuring a consistent structure while allowing for flexibility in implementation. Mastery of abstract classes is crucial for anyone looking to excel in object-oriented design and Java programming.


References


AP CSA Homework Assignment

Assignment: Shape World

Instructions

  1. Create a Java class named ShapeWorld.
  2. Define an abstract class Shape with abstract methods area() and perimeter().
  3. Extend the Shape class with concrete classes Rectangle, Circle, and Triangle. Implement the area() and perimeter() methods for each shape.
  4. In your main method, create instances of each concrete shape and display their areas and perimeters.
  5. Document your code with comments explaining the purpose of each class and method.

Reflect on the benefits of using abstract classes in this scenario and write a brief summary of your thoughts.

Previous
Polymorphism