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.