OOP: Abstract Classes and Interfaces
Abstract Classes
Abstract classes cannot be instantiated and can contain abstract methods.
Interfaces
In Dart, every class implicitly defines an interface. Use implements to implement an interface.
Abstract classes cannot be instantiated and can contain abstract methods.
abstract class Shape {
// Abstract method (no implementation)
double area();
double perimeter();
// Concrete method
void display() {
print('Area: ${area()}, Perimeter: ${perimeter()}');
}
}
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double area() => 3.14159 * radius * radius;
@override
double perimeter() => 2 * 3.14159 * radius;
}
class Rectangle extends Shape {
double width, height;
Rectangle(this.width, this.height);
@override
double area() => width * height;
@override
double perimeter() => 2 * (width + height);
}
void main() {
Shape circle = Circle(5);
Shape rectangle = Rectangle(4, 6);
circle.display(); // Area: 78.53975, Perimeter: 31.4159
rectangle.display(); // Area: 24.0, Perimeter: 20.0
}In Dart, every class implicitly defines an interface. Use implements to implement an interface.
class Flyable {
void fly() {
print('Flying');
}
}
class Swimmable {
void swim() {
print('Swimming');
}
}
class Duck implements Flyable, Swimmable {
@override
void fly() {
print('Duck is flying');
}
@override
void swim() {
print('Duck is swimming');
}
}
void main() {
var duck = Duck();
duck.fly(); // Duck is flying
duck.swim(); // Duck is swimming
}// Abstract class - can have implementation
abstract class Animal {
void eat() {
print('Eating...');
}
void makeSound(); // Abstract method
}
// Interface - must implement all methods
class Walkable {
void walk() {
print('Walking');
}
}
class Dog extends Animal implements Walkable {
@override
void makeSound() {
print('Woof!');
}
@override
void walk() {
print('Dog is walking');
}
}