
static변수 : 전역적 접근이(어디서든 접근되는) 가능한 변수
static 함수 : 전역적으로 사용 가능한 함수 전역변수만 사용가능
static 클래스 : 모든 멤버 변수와 멤버 함수가 static인 클래스 정적 클래스는 인스턴스로 만들 수 없다.



결과와같이 data메모리에 hp 원본에 접근하여 각각의 monster, monster2의 값에 영향을 주는게 아니라 하나의 hp에 값에 영향을 주는것을 볼 수 있다.
상위클래스의 멤버 변수와 함수를 하위클래스에 그대로 가져 오는것이다.
장점 : 비슷한 종류를 여러게 생성할 때 생성과 유지보수가 간편하게 이용된다.
is-a관계 : 상속은 상위개념이 하위개념을 포함하고 있을경우 가능한데 이는 논리적으로 일치할때 이용한다
예를들어
dog는 animal이다. cat은 animal이다. O
water은 animal이다. book은 animal이다. X
상속받은 생성자를 만들때 주의사항은 상위클래스의 생성자가 먼저 만들어진 후에 하위클래스의 생성자가 만들어진다.
ex)


다음과같이 출력되는 이유가 하위클래스가 생성자를 호출시 상위클래스도 같이 호출되게된다 이러한 원리는 하위 클래스를 만들경우 상위클래스도 같이 만들게 되는 형식이기 때문이다.

이러한 형식으로 Dog클래스에는 상위개념과 하위개념을 모두 가져오게된다.
여기에서 의문이 생기는데, 상위생성자에서 매개변수가 있다면 어떤형식으로 나오게될까??
이러한경우 하위생성자에서 같은 매개변수를 입력해줘야한다 이때 사용하는 방식이 base를 이용해 매개변수를 설정해줄 수 있다.

사진처럼 base를 이용해 상위생성자의 매개변수를 생성하고,
하위 생성자의 매개변수를 설정하여준다.
업캐스팅 : 하위클래스는 자동으로 상위클래스의 기능이 사용가능하다
다운캐스팅 : 하위클래스가 자신만의 기능을 사용하고 싶을경우 사용


다운캐스팅)

불안전한 방법 사용 X
안전한방법 1) is
is : if(animal is Dog) -> if(animal은 Dog이면)

안전한 방법 2) as
as : 형변환이 가능하면 바꿔서 주고 아니면 null (TryParse구조랑 비슷함)

추가적으로 오버로딩과 오버라이딩의 이름이 비슷하여 헷갈릴수 있는 사항을 준비했다.
오버로딩 : 변수와 함수는 이름을 하나만 가질 수 있는것으로 아는데 함수의 경우 매개변수에 따라 구분하여 이름이 같게 사용할 수 있다.


오버라이딩: 상위클래스의 함수를 재정의하여 하위클래스의 함수로 덮어씌울수 있게 해준다.(virtual사용해야함)




이떄 상위클래스의 함수도 같이 사용하고싶다 한다면 하위클래스의 함수에 base.Naming()이라고 작성한다면 상위,하위클래스의 모든 내용이 출력된다.
오버로딩, 오버라이딩은 이름은 비슷하지만 전혀 다른 의미를 가지고 있으니 헷갈리면 안된다!
오버라이딩을 배웠으니 다형성도 배워보겠다.
객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질
위에서 보았듯이 다형성이란 virtual,override를 사용해서 상위,하위클래스의 함수를 덮어씌우는 현상을 사용해 상위클래스의 함수를 적용하되 하위 함수를 실행하여 상위함수(아이템을 사용)
하위함수(아이템 사라짐, 체력회복)과 같이 여러 방면으로 구현이 가능해진다.
이로인해 클래스간의 의존성을 줄여 확장성을 높인다.
자식에서 구체화시킬 함수를 생성해 부모클래스에서
정의하지 않고 자식클래스에서 함수를 정의하는것이다.
장점:
- 객체들의 공통적인 특징을 도출하는데 의미
- 구현을 구체화하기 어려운 상위클래스를 설계하기위한
수단으로 사용- 자식클래스에서 만들지 않을경우 오류를 발생하므로
실수를 줄일 수 있다.

abstract를 선언 후 하위클래스의 함수(Run())의 구체화가 없다면 오류를 일으킨다.


추상클래스의 특징으로 추상클래스는 인스턴스화가 되지않는다. 추상클래스는 말그대로 추상적이기 때문에 인스턴스를 실제화 시킬 수 없다.


이러한 추상클래스를 사용하는 이유는 코드의 예로 함수가 Run()이 아니라 Cry()로 바꿔서 설명하자면 Animal클래스의 동물들이 우는것을 정의하자기엔 너무 추상적인 경우가 생기기때문에 하위클래스에서 함수를 구체화 하기 위해 사용한다.