[C#] 모든 클래스의 조상 Object클래스
by #독개#모든 클래스는 Object클래스를 상속 받는다
internal class Animal // :Object 모든클래스는 Object를 상속받는다
{
public void FunAnimal() { }
public virtual void Run() { Console.WriteLine("동물Run"); }
}
internal class Human : Animal
{
public void FunHuman() { }
//조상에게 이미 있는 함수를 자식에서 새로이 선언하면 void new Run()하는게 맞다
//요즘 컴파일러가 직접해줌
public override void Run() { Console.WriteLine("사람Run"); }
}
internal class Student : Human
{
public void FunStudent() { }
public override void Run() { Console.WriteLine("학생Run"); }
}
전편 상속에 이어서 이와같이 상속구조가 있다.
Q) 클래스의 상속은 1개만 가능하다면서요? 그런데 Student는 어떻게 Object를 상속하고 있나요?
A) 결국 최상위의 Animal이 Object를 상속하고 있기 때문이다. 즉, 모든클래스는 Object를 상속하고 있다

object클래스에 정의된 Equals라는 함수를 상속받았어요 라는 말임
Object클래스의 함수 : Equals,GetType,ToString,GetHashCode
Student student = new Student();
Console.WriteLine(student.ToString());
Type type = student.GetType(); //출력 : 네임스페이스명.student
Console.WriteLine(type.FullName); //출력 : 네임스페이스명.student
//Type안에도 엄청나게 많은것들이 정의되어 사용할 수 있다
Student student1 = new Student();
Student student2 = student1;
Student student3 = new Student();
Console.WriteLine(student1.Equals(student2)); //출력 : True
Console.WriteLine(student1.Equals(student3)); //출력 : False
Q) String도 클래스인데 String은 왜 True가 나오는가! 인스턴스가 다를텐데
string a = "hello";
string b = "hello";
Console.WriteLine(a.Equals(b)); //출력 : True
그이유는 Student와는 다르게 String에서 Equals를 재정의 했기 때문이다.


실제로 string의 Equals를 타고 들어가보면 이렇게 다시 정의해둔 것을 볼 수 있다

'🔥 프로그래밍 학습 > C#' 카테고리의 다른 글
| [C#] 추상 클래스 Abstract (0) | 2022.11.28 |
|---|---|
| [C#] ToString()의 활용 (0) | 2022.11.28 |
| [C#] 상속과 오버라이딩 간단하게 정복 (0) | 2022.11.27 |
| [C#] 스택과 힙 메모리 완전 정복 (0) | 2022.11.27 |
| [C#] 상속 (0) | 2022.11.24 |
블로그의 정보
독한 개발자
#독개#