다음은 내 3 클래스 Person
, Employee
및 SalaryEmployee
을 보여줍니다.재정의 된 메서드 호출
각 클래스 (오른쪽부터)는 왼쪽에서 클래스를 상속합니다. 예 : SalaryEmployee
은 Employee
에서 상속됩니다.
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"이었다.
난 당신이 콘솔 응용 프로그램에서 정말 간단한 예제를 작성하고 재정의 방법의 동작을 확인하기 위해 조언 ... – mybirthname
코드가 작동하지만, 당신은 SalaryEmployee에 두 번째 "이름"변수를 만들 필요가 없습니다. Person 클래스에는 비공개 Name 속성이 있어야합니다 (현재 비공개 필드가 있습니다). 그러면 출력은 "My name is S_"+ base.Name; – LarsTech
나는 본다. 고맙습니다. – JLe