4031 Intro arv - Animal

Lärandemål

Ha en grundläggande förståelse för vad arv innebär:

  • Känna till innebörden av begreppen: superklass, överklass , subklass, underklass, subklassen är en superklass
  • Känna till objektvariablers och metoders synlighet i underklassen vid arv och hur den påverkas av nycklorden: public, protected och private.

Teori

Klasserna Cat, Cow och Dog ärver klassen Animal. Objektvariabler och metoder som finns i Animal finns tillgängliga i ärvande klasser. Klassen Animal kallas superklass eller överklass och de tre andra klasserna kallas subklasser eller underklasser.

Man säger att Cat är en Animal.

Klassen Animal

Objektvariablernas synlighet har ändrats till protected för att de ska finnas tillgängliga i subklasser.

using System;
namespace Animal
{
  class Animal
  {
    protected int age;
    protected String sound;

    public Animal()
    {
      age = 1;
      sound = "hej hej";
    }

    public void Act() 
    { 
      Console.WriteLine(sound);
    }
  }
}

Klassen Cat

Klassen Cat ärver klassen Animal detta visas med koden:

class Cat : Animal 

Metoden Act ärvs från klassen Animal. Likaså ärvs objektvariablerna age och sound. Dessa har synligheten satt till protected i Animal för att finnas tillgängliga i underklasser.

using System;
namespace Animal
{
  class Cat : Animal
  {
    //konstruktor
    public Cat(int anAge)
    {
      age = anAge;
      sound = "mjau";
    }
  }
}

Klasserna Cow och Dog

På samma sätt som Cat.

using System;
namespace Animal
{
  class Cow : Animal
  {
    //konstruktor
    public Cow(int anAge)
    {
      age = anAge;
      sound = "mu muu";
    }
  }
}

using System;
namespace Animal
{
  class Dog: Animal
  {
    //konstruktor
    public Cat(int anAge)
    {
      age = anAge;
      sound = "vov vov";
    }
  }
}

Klassen Zoo

Vi vill ha en lista med djur istället för en lista för varje sorts djur som vi hade innan vi introducerade arv. Listan animals kan innehålla objekt av klassen Animal eller av en subklass till Animal.

using System;
using System.Collections.Generic;
using System.Text;

namespace Animal
{
  class Zoo
  {
    private List<Animal> animals;

    public Zoo()
    {
      animals = new List<Animal>();

    }
    public void Add(Animal anAnimal)
    {
      animals.Add(anAnimal);
    }
    public void Run()
    {
      foreach (Animal djuret in animals)
      {
        djuret.Act();
      }
    }
  }
}

Klassen Program med metoden Main

using System;
namespace Animal
{
  class Program
  {
    static void Main(string[] args)
    {
      Zoo zoo = new Zoo();
      zoo.Add(new Cat(3));
      zoo.Add(new Cat(1));
      zoo.Add(new Cat(3));
      zoo.Add(new Dog(4));
      zoo.Add(new Dog(12));
      zoo.Add(new Cow(7));
      zoo.Add(new Cow(7));
      zoo.Add(new Cow(7));
      zoo.Run();

      // Keep the console window open in debug mode.
      Console.WriteLine("Press any key to exit.");
      Console.ReadKey();
    }
  }
}

Körning av programmet ger utskriften:

mjau 
mjau
mjau 
vov vov
vov vov
mu muu
mu muu
mu muu