상속

2010-08-11 8 views
4

, 첫 번째 코드에서 그 두 번째에있는 반면에, 당신은 매개 변수가 기본 클래스의 생성자를 호출하고 니펫을상속

class abc : qwe 
{ 
} 

차이가
class zxc : qwe 
{ 
    zxc() : base(new someAnotherclass()). 
    { 
    }  
} 

답변

10

의 차이 무엇인가 코드 스 니펫 (base code constructor)을 매개 변수와 함께 호출합니다. 다음과 같이

귀하의 기본 클래스를 정의 할 수 있습니다

class qwe{ 
    public qwe(){ /* Some code */ } 

    public qwe(SomeAnotherclass ac){ /* Some other code */ } 
} 

당신의 abc 클래스의 기본 생성자는 정확히 다음과 같습니다 :

class abc{ 
    public abc() : base() {}  
} 
0

첫 번째는 기본이 qwe하는 클래스입니다. 두 번째는 동일하지만 호출되는 동안 기본 클래스에서 지정된 생성자 (다른 인수와 기본 값을 가진)를 실행하는 생성자도 있습니다.

두 번째 스 니펫은 기본 클래스에 기본 생성자가없는 상황을 처리하는 방법을 보여줍니다. 이러한 요구 사항의 이유는 파생 클래스 생성자가 항상 기본 클래스 생성자를 먼저 호출하기 때문입니다. 기본 생성자에 매개 변수가 필요한 경우이를 명시 적으로 호출해야합니다. 그것은 상속에 올 때

0

, 모두 동일합니다 : 당신은 단순히 당신이 생성 인수로 전 QWE 생성자를 호출하는 빈 ZXC 생성자를 정의하는 두 번째 예에서 ZXC의 is_a의 QWE에게

을 (someAnotherclass()). 참조를 어딘가에 유지하고 상속을 유지하지 않으면 일반적으로 집계를 의미합니다.

0

결과는 동일합니다.

zxc에서 생성자를 호출하면 일부 기능을 추가하고 기본 생성자를 호출 할 수 있습니다.

0

두 번째 코드 조각에서 chaining은 기본 클래스의 생성자에 상속 된 (매개 변수 없음) 기본 생성자이며 someAnotherClass 매개 변수를 사용합니다.

zxc 클래스를 초기화 할 때 qwe 생성자를 새 someAnotherClass으로 호출합니다.

첫 번째 코드 스 니펫으로는이 생성자 연결이 일어나지 않습니다.

0

아마 당신은이

class qwe 
{ 
    // public constructor accepting SomeAnotherType 
    public qwe(SomeAnotherType someAnotherClass) 
    { 
    } 
} 

이러한 접근 방식이 호출 될 것을 의미

class abc : qwe 
{ 
} 

class zxc : qwe 
{ 
    public zxc() : base(new someAnotherClass()). 
    { 
    }  
} 

의미 nested constructor call 또는 constructor chaining