PR3-Rust-SS26/B-basics/11-traits.rs

52 lines
1.1 KiB
Rust

// Mit Interfaces aus Java vergleichbar
trait Flieger {
fn new() -> Self; // Eine new Funktion, um ein Struct zurück zu geben
fn fliegen(&self); // Instanzmethode, die Zeug macht, das noch nicht bekannt ist
fn landen(&self);
}
struct Flugeug {}
struct Ente {}
// Hier implementieren wir die Methoden vom Flieger Trait für Flugzeug
impl Flieger for Flugeug {
fn new() -> Self {
return Flugeug {};
}
fn fliegen(&self) {
println!("Ich heb ab, nichts hält mich am Boden");
}
fn landen(&self) {
println!("Party vorbei, ich lande")
}
}
// Hier implementieren wir die Methoden vom Flieger Trait für Ente
impl Flieger for Ente {
fn new() -> Self {
return Ente {};
}
fn fliegen(&self) {
println!("Quak, ich fliege, quak");
}
fn landen(&self) {
println!("Quak, ich lande nun, quak");
}
}
fn main() {
let flugzeug: Flugeug = Flieger::new();
let ente: Ente = Flieger::new();
flugzeug.fliegen();
flugzeug.landen();
ente.fliegen();
ente.landen();
}