Difference between revisions of "6237 Programmering II (Csharp) Agenda/Classes inheritance"

From Teknologisk videncenter
Jump to: navigation, search
(Arv (Inheritance))
Line 64: Line 64:
 
}
 
}
 
</source>
 
</source>
[[Category:Csharp]]
+
[[Category:6237 Programmering II]]

Revision as of 14:30, 29 September 2015

Arv (Inheritance)

Vi lavede i sidste eksempel klassen Person. På skolen mercantec kunne den godt dække både lærer og elever. Der er dog den tilføjelse at en elev er tilknyttet et hold, det er læreren ikke. Til gengæld får læreren løn.

Det kan vi gøre ved at specialisere klassen Person.

I UML ser det således ud.

6237 Programmering II Classes inheritanceFig1.png

I koden laver vi nerarvning ved at skrive Elev : Person hvilket betyder at elev arver alle attributter og metoder fra Person.

I konstruktøren tilføjer vi parametren hold, men sender navn og email videre til konstruktøren for Person (base).

class Elev : Person
{
	private String hold;
	public String Hold
	{
		get { return hold; }
		set { hold = value; }
	}

	//Konstruktør
	public Elev(String navn, String email, String hold)
		: base(navn, email)
	{
		this.hold = hold;
	}
}

På sammemåde laves klassen laerer

class Laerer : Person
{
	private Double loen;
	public Double Loen
	{
		get { return loen; }
		set { loen = value; }
	}

	//Konstruktør
	public Laerer(String navn, String email, Double loen)
		: base(navn, email)
	{
		this.loen = loen;
	}
}

Derefter kan vi oprette både en laerer og en elev, og på begge kan vi kalde metoden SigHej da de arver fra Person, men det er kun eleven der har et hold og kun lærer der får løn.

static void Main(string[] args)
{
	Laerer l1 = new Laerer("Tommy", "tommys@mail.dk", 25000);
	l1.SigHej("Lars");
	System.Console.WriteLine(l1.Loen);
	
	Elev e1 = new Elev("Jens", "jens@mail.dk", "Hold1");
	e1.SigHej("Lars");
	System.Console.WriteLine(e1.Hold);
}