// Im Kontext der Klassen sind die Eigenschaten (Properties) einer Klasse Variablen (Variables), Methoden (Methods) in einer Klasse sind Funktionen
// ES6                                                               // ES6
//   constructor() {                                                    myMethod() { ... }
//     this.myProperty = "value";
//   }
//
// ES7                                                               // ES7
// myProperty = "value";                                                myMethod = () => { ... }

// ES 6
class Human {
  constructor() {
    this.gender = "male";
  }

  printGender() {
    console.log(`${this.gender}`);
  }
}
class Person extends Human {
  constructor() {
    super(); // wenn eine Klasse abgeleitet von einer anderen Klasse ist, muss eine solche Klasse mit der super() Anweisung definiert sein.
    this.name = "David";
  }

  printMyName(name) {
    console.log(`${this.name}`);
  }
}

// ES7
class Human {
  gender = "male";

  printGender = () => console.log(`${this.gender}`);
}

class Person extends Human {
  name = "David";

  constructor() {
    super(); // wenn eine Klasse abgeleitet von einer anderen Klasse ist, muss eine solche Klasse mit der super() Anweisung definiert werden.
  }

  printMyName = () => console.log(`${this.name}`);
}

const person = new Person();
person.printmyName();
person.printGender();
