Class Modifiers Modificadores de clase

Controla los permisos de herencia, implementación e instanciación de clases por parte de las bibliotecas externas y restringe los cuerpos de tipo

Orden de modificadores [abstract] [base/interface/final/sealed] [mixin] class; algunos modificadores se excluyen mutuamente

1. Sin modificador

Cualquier biblioteca puede instanciar, heredar o implementar

// a.dart
class Vehicle {
  void move() {}
}

// b.dart
import 'a.dart';
Vehicle v = Vehicle();
class Car extends Vehicle {}
class Mock implements Vehicle {}
Lenguaje del código: JavaScript (javascript)

2. abstract clase abstracta

No se puede instanciar; el código externo puede usar extends /implements

abstract class Vehicle {
  void move(); // método abstracto
}

// Válido
class Car extends Vehicle {
  @override void move() {}
}

class Mock implements Vehicle {
  @override void move() {}
}

// Vehicle(); // Error, no se puede instanciar
Lenguaje del código: JavaScript (javascript)

3. base class

√ Permitido new|√ extends externo permitido|× implements externo prohibido

Garantiza que las subclases hereden obligatoriamente la implementación de la clase padre e impide implementaciones falsas desde fuera

// lib/a.dart
base class Vehicle {
  void move() => print("move");
}

// main.dart
import 'a.dart';
Vehicle v = Vehicle();

base class Car extends Vehicle {} // √ La herencia requiere base/final/sealed

// class Mock implements Vehicle {} // × Implementación externa prohibida
Lenguaje del código: JavaScript (javascript)

4. interface class

√ Permitido new|× extends externo prohibido|√ implements externo permitido

// a.dart
interface class Vehicle {
  void move() => print("move");
}

// main.dart
import 'a.dart';
Vehicle v = Vehicle();

// class Car extends Vehicle {} // × Herencia externa prohibida
class Mock implements Vehicle { // √ Implementación permitida
  @override void move() {}
}
Lenguaje del código: PHP (php)

abstract interface

Interfaz pura, de uso frecuente

No se puede instanciar; desde fuera solo se admite implements

abstract interface class Vehicle {
  void move();
}
class Mock implements Vehicle {
  @override void move() {}
}
Lenguaje del código: PHP (php)

5. final class

√ Permitido new|× extends externo prohibido|× implements externo prohibido

No se permite derivación externa, asegura una API pública estable

// a.dart
final class Vehicle {}

// main.dart
import 'a.dart';
Vehicle v = Vehicle();
// class Car extends Vehicle {}    // ❌
// class Mock implements Vehicle{} // ❌
Lenguaje del código: JavaScript (javascript)

6. sealed class (clase sellada)

× No admite new|× extends/implements externos prohibidos;las subclases deben estar definidas en el mismo archivo

El compilador reconoce todas las subclases directas y obliga a la coincidencia exhaustiva en sentencias switch

sealed class Vehicle {}

class Car extends Vehicle {}
class Bike extends Vehicle {}

void test(Vehicle v) {
  switch(v) {
    case Car(): print("car");
    case Bike(): print("bike");
  }
}
// Vehicle(); // ❌ sealed es abstract implícito, no instanciable
Lenguaje del código: PHP (php)

Reglas de exclusión mutua

  1. sealed + abstract: sealed trae abstract implícito, combinación prohibida
  2. interface/final/sealed + mixin: no se pueden combinar
  3. No se pueden declarar simultáneamente base /interface/final /sealed en el mismo nivel

Class Modifiers Modificadores de clase

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *