Jenner Acosta Diaz
Dart Website

Clases y @override

Clases

Las clases en Dart siguen un enfoque orientado a objetos y se utilizan para definir objetos y su comportamiento. Aquí hay un ejemplo básico de cómo se ve una clase en Dart:

class Persona {
  String nombre;
  int edad;

  Persona(this.nombre, this.edad); // Constructor

  void saludar() {
    print('Hola, mi nombre es $nombre y tengo $edad años.');
  }
}

En el ejemplo anterior, hemos definido una clase llamada «Persona» que tiene dos propiedades: «nombre» de tipo String y «edad» de tipo int. También tenemos un constructor abreviado que nos permite inicializar las propiedades cuando creamos un objeto de la clase.

La clase también tiene un método llamado «saludar()» que imprime un mensaje utilizando las propiedades de la clase.

Para crear objetos de esta clase, podemos hacer lo siguiente:

void main() {
  Persona persona1 = Persona('Juan', 25);
  Persona persona2 = Persona('María', 30);

  persona1.saludar();
  persona2.saludar();
}

En este ejemplo, hemos creado dos objetos de la clase «Persona» y les hemos asignado valores a las propiedades utilizando el constructor abreviado. Luego, llamamos al método «saludar()» en cada objeto para imprimir los mensajes correspondientes.

Este es solo un ejemplo básico de cómo se pueden utilizar las clases en Dart. Las clases en Dart son bastante flexibles y admiten características adicionales como herencia, interfaces y métodos estáticos, entre otras.

@override

En Dart, el @override es una anotación opcional que se utiliza para indicar que un método en una clase está sobrescribiendo un método de su clase base (superclase) o una interfaz. Se utiliza principalmente para mejorar la legibilidad del código y asegurarse de que el método sobrescrito cumpla con la firma (nombre y parámetros) correcta de la clase base o la interfaz.

Al utilizar @override, le estás diciendo al compilador que el método en la clase derivada (subclase) tiene la intención de sobrescribir un método en la clase base o en una interfaz. Esto ayuda a prevenir errores comunes de tipado o nombres de métodos mal escritos.

Aquí tienes un ejemplo que ilustra su uso:

class Animal {
  void hacerSonido() {
    print('El animal hace un sonido');
  }
}

class Perro extends Animal {
  @override
  void hacerSonido() {
    print('El perro ladra');
  }
}

void main() {
  Perro miPerro = Perro();
  miPerro.hacerSonido(); // Imprime "El perro ladra"
}

En este ejemplo, la clase Perro hereda de la clase Animal y sobrescribe el método hacerSonido(). Usar @override en el método hacerSonido() de la clase Perro indica que estamos reemplazando la implementación del método de la clase Animal. Si olvidamos agregar @override, el código todavía funcionará, pero podría llevar a errores si la firma del método en la clase base cambia en el futuro y nuestra intención era sobrescribirlo.

En resumen, @override es una anotación útil en Dart para asegurarse de que los métodos estén correctamente sobrescritos y mejorar la claridad del código al indicar explícitamente las intenciones del programador.

Ejercicio de la Sesión

void main() {
  
  final wolverine = Hero(name: 'Logan', power: 'Regerenación');
  print(wolverine);
  print(wolverine.name);
  print(wolverine.power);
  
}


class Hero {
  
  String name;
  String power;
  
//   Hero( String pName, String pPower )
//     : name = pName,
//       power = pPower;
  
  Hero({
    required this.name,
    this.power = 'Sin poder'
  });
  
  @override
  String toString() {
    return '$name - $power';
  }
}