2016-09-30 4 views
1

다음은 내 3 클래스 Person, EmployeeSalaryEmployee을 보여줍니다.재정의 된 메서드 호출

각 클래스 (오른쪽부터)는 왼쪽에서 클래스를 상속합니다. 예 : SalaryEmployeeEmployee에서 상속됩니다.

class Person 
{ 
    private string address; 
    private string name; 

    public Person(string givenName, string givenAddress) 
    { 
     name = givenName; 
     address = givenAddress; 
    } 

    public virtual void outputName() 
    { 
     MessageBox.Show("My name is " + name); 
    } 

    public void outputAddress() 
    { 
     MessageBox.Show("My address is " + address); 
    } 

    public void setName(string newName) 
    { 
     name = newName; 
    } 

    public void setAddress(string newAddress) 
    { 
     address = newAddress; 
    } 
} 

class Employee : Person 
{ 
    private string NINumber; 

    public Employee(string givenName, string givenAddress) : base(givenName, givenAddress) 
    { 
    } 

    public void setNINumber(string givenNumber) 
    { 
     NINumber = givenNumber; 
    } 

    public void getNINumber() 
    { 
     MessageBox.Show("My National Insurance Number is " + NINumber); 
    } 
} 

class SalaryEmployee : Employee 
{ 
    private string name; 
    private string address; 

    public SalaryEmployee(string givenName, string givenAddress) : base(givenName, givenAddress) 
    { 
     name = givenName; address = givenAddress; 
    } 

    public override void outputName() 
    { 
     MessageBox.Show("My name is " + "S_" + name); 
    } 
} 

OOP는 나에게 상당히 새로운 것이므로 상속권을 얻으려고합니다. 내가 직면하고있는 문제는 'PersonFive'라는 개체를 만든 것입니다 :

SalaryEmployee personFive = new SalaryEmployee("Bob", "North Pole"); 

// 내가 매개 변수로 사용했던 주소 '북극'을 무시, 그것은 바로이 예를 들어 사용됩니다. 나는 .outputName() 메소드를 호출 할 수 있어요

는, 출력은 다음과 같습니다

"My name is Bob" 

그러나 기본 방법 대신 오버라이드 (override) 된 메소드의 호출된다. 내가 그것을주고 싶었던 결과는 "내 이름은 S_Bob"이었다.

+0

난 당신이 콘솔 응용 프로그램에서 정말 간단한 예제를 작성하고 재정의 방법의 동작을 확인하기 위해 조언 ... – mybirthname

+1

코드가 작동하지만, 당신은 SalaryEmployee에 두 번째 "이름"변수를 만들 필요가 없습니다. Person 클래스에는 비공개 Name 속성이 있어야합니다 (현재 비공개 필드가 있습니다). 그러면 출력은 "My name is S_"+ base.Name; – LarsTech

+0

나는 본다. 고맙습니다. – JLe

답변

0

그것은 나를 위해 일하고있다, 당신은 오류를 만드는 실제 코드를 게시하지 않았을 수도있다.

The code output

+0

이것은 답변이 아니라 주석이어야합니다. 실제로 질문에 대답하지 않습니다. –

+0

실례합니다. 당시 (15 점 미만) 논평 할 특권이 없었지만 도움을 주려고했습니다. 자, 당신은 다른 점수를 얻으려고 아래로 투표했습니다. 어쨌든 감사합니다. – Abdulhameed

+1

댓글을 달 수있는 담당자가 없다면 옳은 일은 실제로 진행되는 것이지 실제로는 대답이 아닌 "대답"을 추가하는 것이 아닙니다. –

관련 문제