상속
존재하는 모든 몬스터를 클래스로 만드는 게 좋음 - 고블린, 오크 등등 따로
몬스터의 속성 : 공격력, 방어력 등 존재하는 모든 변수를 한 클래스로 빼놓고
그것을 상속받아 사용가능
초기화블럭, 생성자 존재 이유 : 클래스 내의 변수를 초기화하기 위해 존재 => 다른 클래스에
물려줄 필요 없음.
오버라이딩 : 상속받는 메서드의 내용이 마음에 안들어 다른 내용으로 바꾸고 싶을 때 메서드를 다시
만드는 것
super : 부모클래스의 변수,메서드와 자식클래스의 변수,메서드의 이름이 똑같을 때 구분하기 위해 사용
super() : 생성자 안에서 부모클래스의 생성자를 불러올 때 사용
다형성 : 객체의 타입과 변수의 타입이 서로 다른 것 (변수가 다양한 형태를 가진다.)
=> 상속때문에 생겨나는 것
int var;
void test(double var){
System.out.println(var); //지역변수
System.out.println(this.var); //인스턴스 변수
System.out.println(super.var); //부모 클래스의 인스턴스 변수
//super : 부모 클래스의 멤버(변수와 메서드 모두)와 자식 클래스의 멤버가
이름이 중복될 때 둘을 구분하기 위해 사용한다.
System.out.println(this.method(10,20)); //상속받아서 오버라이딩 한 내가만든 메서드
System.out.println(super.method(10,20)); //부모 클래스에 있는 메서드
}
SampleChild(){
super(); //부모클래스의 생성자 호출
//super()를 통해 클래스의 생성자를 호출하고 부모클래스의 인스턴스 변수도 초기화한다.
//super()가 없으면 컴파일러가 자동으로 super()를 넣어준다.
}
다형성
public static void main(String[] args) {
SampleChild sc = new SampleChild(); // 변수의 타입과 객체의 타입이 같다.
SampleParent sp = new SampleChild(); // 변수의 타입과 객체의 타입이 다를 수 있다.
(다형성 - 상속되어있다는 전제가 있어야함) 형변환이 생략된 상태
//부모타입에 있는 변수만 사용 가능
//부모타입 변수에 자식타입 객체를 생성하는 것 : 다형성
//SampleChild2
//SampleChild3
//SampleParent : 2개
//SampleChild : 2개 + 4개 = 6개
sc = (SampleChild)sp;//형변환되지 않음,
부모클래스=>자식클래스는 자동형변환 안됨(멤버의 차이 때문)
sp = sc;//형변환 생략, 자식클래스=>부모클래스는 자동형변환 가능
}
자식클래스에서 부모클래스의 생성자를 필수로 호출해줘야 함.
컴파일러가 파라미터가 있는 생성자를 호출할 수 없기때문에 우리가 직접 초기화해줘야 한다.