Dziedziczenie i polimorfizm

Zarówno Java, jak i Objective-C wspierają dziedziczenie i polimorfizm. Poniżej znajdziesz definicje klasy bazowej Figura oraz definicje klas pochodnych oraz wykorzystanie mechanizmu polimorfizmu, w języku Java.

abstract class Figura //nie mozna tworzyc instancji tej klasy
{
   abstract double pole(); //metoda abstrakcyjna
   abstract double obwod();
}

class Okrag extends Figura
{
   double promien;
   Okrag(double promien)
   {

   }

   double pole()
   {

   }
}

class Prostokat extends Figura
{
   double dlugosc;
   double szerokosc;

   Prostokat(double dlugosc,double szerokosc)
   {
      this.dlugosc=dlugosc;
      this.szerokosc=szerokosc;
   }

   double pole()
   {

   }
}

public class Program
{
   public static void main(String[] args)
   {
      Figura z=new Okrag(2);

      Figura[] a={new Prostokat(3,5),new Okrag(8),new Okrag(3)};
   }
}

Analogiczny mechanizm zapisany w języku Objective-C miałby postać

@interface Figura : NSObject
{
   int width;
   int height;
}

-(void)initWith:(int)w andWith:(int)h;

-(int)area;

@end

@implementation Figura

-(void)initWith:(int)w andWith:(int)h
{

   width = w;
   height = h;
}

-(int)area
{
   return 0;
}

@end

@interface Rectangle : Figura

-(int)area;

@end

-(int)area

{
   return width * height;
}

@end

int main(int argc, const char * argv[])
{
   @autoreleasepool
   {

      Figura* obj;
      obj = [[Rectangle alloc]init];
      [obj initWith:7 andWith:10];
      int k = [obj area];
      NSLog(@"%i",k);
   }
   return 0;
}

Zarówno w przypadku języka Java jak i Objective-C, możliwe jest tylko dziedziczenie po jednej klasie bazowej (inaczej niż na przykład w języku Python), ale obydwa języki posiadają mechanizmy umożliwiające dziedziczenie wielobazowe w przypadku klas spełniających pewne ograniczenia. W języku Java noszą one nazwę interfejsów, a w Objective-C protokołów.

Następna część - Klasy i obiekty