6236 Programmering I Agenda/Inheritance

From Teknologisk videncenter
Jump to: navigation, search

En meget brugt ting i objektorienteret programmering er muligheden for at arve fra andre klasser.

Lad os antage at vi har fået en ny type af konto der kan spærres for hævninger indtil en bestemt dato.

Det kan vi gøre ved at oprette en ny Class der har attributten friDato og arver fra Konto. Derved får vi en klasse der kan alt som Konto kan, plus det der er tilføjet i den nye klasse.

class Opsparing : Konto
{
	//fri Dato angiver hvornår pengene kan hæves fra
	public DateTime friDato;

	//Konstruktøren tager saldo som parameter på samme måde og sender input direkte videre til base (Konto).
	public Opsparing(double saldo):base (saldo)
	{

	}
}

I main anvendes klassen på samme måde som Konto

static void Main(string[] args)
{
	//Her laves en ny variable af type Konto
	Opsparing k = new Opsparing(25000);
	k.oplysSaldo();
}

Hvis nogen prøver at hæve penge før de er frigivet er vi nødt til at stoppe det. Derfor er Opsparing nødt til at have sin egen haev() metode.

Det første man gør er i Konto at skrive virtual ved haev(). Derefter kan man i Opsparing få lov at override metoden.

Det betyder at for objekter (variable) af typen Konto vil den almindelige haev() blive kaldt, men for opsparing vil den nye haev() blive kaldt.


class Konto
{
	...
	virtual public void haev()
	{
		System.Console.WriteLine("Hvor meget vil du hæve?");
		Double beloeb = Convert.ToDouble(System.Console.ReadLine());
		saldo = saldo - beloeb;
	}
	....
}


class Opsparing : Konto
{
	....
	public override void haev()
	{
		if (DateTime.Now > friDato)
		{
			base.haev();
		}
		else
		{
			System.Console.WriteLine("Der kan ikke hæves fra kontoen før " + friDato);
		}
	}
}


class Program
{
	static void Main(string[] args)
	{
		//Her laves en ny variable af type Konto
		Opsparing k = new Opsparing(25000);
		k.friDato = new DateTime(2020, 1, 1);
		k.oplysSaldo();
		k.haev();
	}
}
 

Din saldo er 25000
Der kan ikke hæves fra kontoen før 01-01-2020 00:00:00

Hvis man øsnker at overfører friDato i konstruktøren til Opsparing er det muligt således.

class Opsparing : Konto
{
	public DateTime friDato;

	public Opsparing(double saldo, DateTime friDato):base (saldo)
	{
		this.friDato = friDato;
	}

I main

static void Main(string[] args)
{
	//Her laves en ny variable af type Konto
	Opsparing k = new Opsparing(25000,new DateTime(2020,1,1);
	k.oplysSaldo();
	k.haev();