Java

[Java/자바] 상속과 다형성

둥구는 지굴다 2022. 9. 30. 17:46

안녕하세요~ 오늘은 자바 클래스의 상속과 다형성에 대해 알아볼까 합니다~

상속이란?

상속은 말 그대로 부모 클래스의 기능을 자식 클래스가 물려받는 것입니다.

상속을 사용하는 이유는?

부모 클래스에서 작성한 기능을 자식 클래스에서 똑같이 작성하지 않고 다시 한번 재사용하기 위함입니다.

한마디로 코드의 "재사용성"이라는 것이죠!!

 

상속 방법

[구조]

class 클래스명 extends 부모클래스명{ 

}

상속에는  extends라는 키워드가 사용됩니다. extends를 사용하면 상속을 받을 수 있는 것이지요!

상속 시 주의사항

  • 상속 시에는 생성자는 상속되지 않는다
  • 다중 상속을 지원하지 않습니다. 간단한 이유는 변수의 중복 때문입니다.
  • 클래스 앞 final 키워드는 다른 클래스가 상속 불가

상속 예시

메인 메서드

public class Inheritance1 {

	public static void main(String[] args) {
		Students st= new Students();
		st.breath();
		st.learn();
		
		Teacher t=new Teacher();
		System.out.println("Teacher 클래스");
		t.eat();
		t.teach();
		
	}

}

Person  클래스 (부모)

class Person{
	void breath() {
		System.out.println("숨쉬기");
	}
	void eat() {
		System.out.println("먹기");
	}
	void say() {
		System.out.println("말하기");
	}
}

Students 클래스(자식)

class Students extends Person{
	void learn() {
		System.out.println("배우기");
	}
}

Person(부모) 클래스를 상속받았습니다.

void learn() {System.out.println("배우기");}

기능을 추가해 주었습니다.

Teacher 클래스(자식)

class Teacher extends Person{
	void teach() {
		System.out.println("가르치기");
	}
}

Teacher클래스 또한 Person(부모) 클래스한테 상속받았습니다.

void teach() {System.out.println("가르치기") }

 

위와 같이 부모는 여러 자식 클래스에게 상속해줄 수 있습니다.

하지만 반대로 여러 명의 부모 클래스로부터 상속을 받을 수는 없습니다.

상속을 받으면 아래와 같이 객체를 생성한 뒤 부모의 기능인지 자기 자신의 기능인지 알 수 있습니다.


오버 라이딩

오버 라이딩이란 자식 클래스에서 부모 클래스로부터 물려받아온 메서드를 재정의 하는 것입니다.

오버라이딩 조건은 반드시 클래스 간의 관계가 상속 조건이어야 합니다.

사용목적

부모 클래스에서 상속받은 기능이 재정의 하고 싶을 때 다른 기능으로 바꾸고자 할 때 사용합니다.

 

근데 만일 이렇게 부모 클래스의 기능을 재정의 즉, 오버라이딩 했는데 부모클래스의 기능도 사용하고 싶다면?

Super라는 키워드를 사용합니다 super. 기능

부모 클래스의 필드 사용방법 ⇒ super

자식 클래스 내 필드 사용방법 ⇒ this

오버 라이딩 예시


메인 메서드

public static void main(String[] args) {
		Leader leader=new Leader();
		leader.say();
	}

}

Student클래스(부모)

class Student{
	void learn() {
		System.out.println("배우기");
	}
	void eat() {
		System.out.println("밥먹기");
	}
	void say() {
		System.out.println("선생님 안녕하세요~");
	}
}

Leader클래스(자식)

class Leader extends Student{
	void lead() {}
	void say() { //메서드 오버라이딩 => 부모에게 상속받은 메서드를 재정의해주었다.
		System.out.println("선생님께 인사!");
		super.say(); //부모 클래스의 메서드를 불러옴
	}
}

자식 클래스가 부모 클래스의 기능인 say를 오버 라이딩했습니다.

System.out.println("선생님께 인사!"); 

하지만 이렇게 재정의한 메서드도 사용하고 싶고 부모의 기능도 그대로 사용하고 싶다면?

바로  super.say( );  super라는 키워드로 부모의 메서드를 그대로 가져와 줍니다.

 

final 클래스

final클래스는 상속이 불가능한 클래스입니다.

 

 final 클래스 예시

package day09;

public class Final_Class {

	public static void main(String[] args) {

	}

}
final class Parent{}

//오류=>final클래스는 상속 불가 class child extends Parent{}

위와 같이  final 클래스는 상속을 할 수 없습니다.


이상으로 오늘은 자바의 클래스에서 상속, 다형성에 대해 알아보았는데요.

조금 어려울 수 있는 내용이지만 클래스를 계속 활용하다 보면 조금씩 구조가 잡힐 거예요!

그럼 저는 이만 포스팅 마치겠습니다.

감사합니다!!