기초JAVA 15강 - 상속, 오버라이딩, 다형성

Whatever·2021년 9월 29일
0

기초 JAVA

목록 보기
15/26

상속

  • 기존의 클래스를 물려받아 새로운 클래스를 만드는 것이다.
  • 자식클래스명 extends 부모클래스명 {}
  • 부모 클래스의 생성자와 초기화블럭을 제외한 모든 멤버를 물려받는다.
  • 하나의 클래스만 상속받을 수 있다.
  • 상속받지 않는 모든 클래스는 Object 클래스를 상속받는다.
  • 자식 클래스는 부모 클래스의 멤버 외의 새로운 멤버를 가질 수 있으므로
    자식 클래스는 부모 클래스보다 크거나 같다.
  • 두개 이상의 클래스를 만드는데 공통된 멤버가 있는 경우 부모클래스로 만든다.

존재하는 모든 몬스터를 클래스로 만드는 게 좋음 - 고블린, 오크 등등 따로
몬스터의 속성 : 공격력, 방어력 등 존재하는 모든 변수를 한 클래스로 빼놓고
그것을 상속받아 사용가능

초기화블럭, 생성자 존재 이유 : 클래스 내의 변수를 초기화하기 위해 존재 => 다른 클래스에
물려줄 필요 없음.

오버라이딩 : 상속받는 메서드의 내용이 마음에 안들어 다른 내용으로 바꾸고 싶을 때 메서드를 다시
만드는 것
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;//형변환 생략, 자식클래스=>부모클래스는 자동형변환 가능
}

자식클래스에서 부모클래스의 생성자를 필수로 호출해줘야 함.
컴파일러가 파라미터가 있는 생성자를 호출할 수 없기때문에 우리가 직접 초기화해줘야 한다.

0개의 댓글

관련 채용 정보