Abstract Classes

Abstract Classes

About

  • Abstract classes define incomplete blueprints.
  • Cannot be instantiated directly.
  • Enforce implementation contracts.
  • Support partial implementations.

Main Topics

  1. Basic Abstract Class

    • Definition: Class with abstract modifier.
    • Example:
      abstract class Shape {
        double area(); // Abstract method
      }
  2. Concrete Subclasses

    • Definition: Implementing abstract members.
    • Example:
      class Circle extends Shape {
        @override
        double area() => pi * radius * radius;
      }
  3. Partial Implementations

    • Definition: Mixing concrete and abstract.
    • Example:
      abstract class Animal {
        void eat(); // Abstract
        void sleep() => print('Sleeping'); // Concrete
      }
  4. Interface Enforcement

    • Definition: Required method signatures.
    • Example:
      abstract class Repository {
        Future<Data> fetch();
      }

How to Use

  • Declare: Use abstract modifier
  • Implement: Subclasses must override abstracts
  • Extend: Can include concrete methods
  • Combine: With interfaces and mixins

How It Works

  • Instantiation: Only through subclasses
  • Type System: Abstract types as references
  • Contracts: Compile-time enforcement

Example Session:

void main() {
  Shape circle = Circle(radius: 5); // Abstract type reference
  print(circle.area());
}

Conclusion

Abstract classes strike a balance between interfaces and full implementations, serving as powerful tools for defining shared contracts while allowing flexible concrete implementations in Dart applications.