Читать книгу Angular - Manfred Steyer - Страница 41

Abstrakte Klassen

Оглавление

Manche Basisklassen sollen lediglich Felder und Methoden für Subklassen vorgeben, jedoch selbst nicht als Vorlage für Objekte dienen. Ein Beispiel dafür ist die Klasse AbstractAddress in Beispiel 2-18. Sie wurde mit dem Schlüsselwort abstract versehen.

Beispiel 2-18: Abstrakte Basisklasse

// src/app/ts/address.ts

export abstract class AbstractAddress {

id: number = 0;

street: string = '';

zipCode: string = '';

city: string = '';

constructor(id: number) {

this.id = id;

}

fullAddress(): string {

return this.street + ', ' + this.zipCode + ' ' + this.city;

}

abstract toCSV(): string;

}

Das Schlüsselwort abstract verhindert nicht, dass andere Klassen von dieser Klasse erben können. Allerdings unterbindet es die Nutzung des new-Operators zur Erzeugung einer neuen Instanz von AbstractAddress. Die Anweisung

const a = new AbstractAddress(7); // FEHLER

ist somit nicht zulässig.

Wie dieses Beispiel zeigt, können abstrakte Klassen auch abstrakte Methoden haben. Das sind Methoden, die nur eine Signatur, aber keine Implementierung aufweisen. Demzufolge müssen erbende Klassen sie implementieren (sofern diese nicht auch abstrakt sind). Ein Beispiel dafür ist die CompanyAddress (siehe Beispiel 2-19), die von AbstractAddress erbt und eine Implementierung für die abstrakte Methode toCSV liefert:

Beispiel 2-19: Erben von abstrakter Basisklasse

// src/app/ts/company-address.ts

import { AbstractAddress } from './address';

export class CompanyAddress extends AbstractAddress {

companyName: string = '';

toCSV() {

return `${this.id};${this.companyName};${this.street};${this.zipCode};

${this.city}`;

}

}

Der Vollständigkeit halber zeigt Beispiel 2-20 den Einsatz der CompanyAddress:

Beispiel 2-20: CompanyAddress instanziieren

// src/app/ts/demo.ts

import { CompanyAddress } from './company-address';

[...]

const a1 = new CompanyAddress(1);

a1.id = 1;

a1.city = 'Graz';

a1.street = 'Hier';

a1.zipCode = '8010';

a1.companyName = 'Steh & Schau GmbH';

console.debug('a1 as csv', a1.toCSV());

console.debug('a1 as full Address', a1.fullAddress());

Angular

Подняться наверх