Raga qualcuno potrebbe spiegarmi perchè mi appare questo errore?
In pratica è solo un programma di prova..Abbiamo 2 classi: ClasseA e ClasseB.
ClasseB eredita da A i metodi ma ne sovrascrive uno. Di seguito il codice:

main:

codice:
#import <Foundation/Foundation.h>
#import "ClasseA.h"
#import "ClasseB.h"

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

   @autoreleasepool {
       
      ClasseA *istanzaClasseA = [ClasseA new];
      ClasseB *istanzaClasseB = [[ClasseB alloc]init];
      
      [istanzaClasseA initVar];
      [istanzaClasseA somma];
      
      [istanzaClasseB initVar];
      [istanzaClasseB somma];
      
   }
    return 0;
}
ClasseA.h e .m ( su due file separati):

codice:
@interface ClasseA : NSObject

-(void)initVar;
-(void)somma;

@end


#import "ClasseA.h"

@implementation ClasseA
{
   @protected
   int iVar;
   int iVar2;
}

-(void)initVar
{
   iVar = 30;
   iVar2 = 70;
}

-(void)somma
{
   iVar += iVar2;
   NSLog(@"Il valore di iVar corrente è %i", iVar);
}

@end
Classe B .h e .m (anch'esso su file separati):

codice:
#import "ClasseA.h"

@interface ClasseB : ClasseA

-(void)initVar;
-(void)somma;

@end


#import "ClasseA.m"
#import "ClasseB.h"

@implementation ClasseB

-(void)initVar
{
   iVar = 20;
   iVar = 30;
}
-(void)somma
{
   iVar += iVar2;
   NSLog(@"Il valore di iVar corrente ora è %i", iVar);
}
@end
L'editor non mi da ALCUN problema è in fase di compilazione che il linker mi da questo errore:

SovrascritturaMetodo.build/Debug/SovrascritturaMetodo.build/Objects-normal/x86_64/ClasseB.o
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Vi prego aiutatemi a capire perchè ho notato che se metto TUTTO il codice su una SOLA pagina, va alla grande....why??