[Java/자바] 상속과 다형성
안녕하세요~ 오늘은 자바 클래스의 상속과 다형성에 대해 알아볼까 합니다~
상속이란?
상속은 말 그대로 부모 클래스의 기능을 자식 클래스가 물려받는 것입니다.
상속을 사용하는 이유는?
부모 클래스에서 작성한 기능을 자식 클래스에서 똑같이 작성하지 않고 다시 한번 재사용하기 위함입니다.
한마디로 코드의 "재사용성"이라는 것이죠!!
상속 방법
[구조]
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 클래스는 상속을 할 수 없습니다.
이상으로 오늘은 자바의 클래스에서 상속, 다형성에 대해 알아보았는데요.
조금 어려울 수 있는 내용이지만 클래스를 계속 활용하다 보면 조금씩 구조가 잡힐 거예요!
그럼 저는 이만 포스팅 마치겠습니다.
감사합니다!!
