ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클래스의 상속(inheritance)
    백엔드/자바 2020. 7. 28. 01:23

    상속이란?

    기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 말함.

     

    더 간단히 말해 두 클래스는 부모와 자식 관계로 맺어주는 것을 말함.

     

    상속은 캡슐화, 은닉화와 더불어 객체지향프로그래밍을 구성하는 중요 요소 중 하나.

     

    그림으로 간단히 나타내면 다음과같다.

     

    상속의 장점

    클래스 상속은 다음과 같은 특징을 갖는다.

     

    - 자식 클래스는 부모 클래스의 모든 멤버(클래스 내 메서드, 변수)를 상속받는다.

     

    - 단, 초기화 블록과 생성자는 상속받지 않는다.

     

    - 결과적으로 모든 자식 클래스는 부모 클래스보다 같거나 더 많은 멤버를 가진다.

     

    - 자손을 아무리 변경해도 조상에 영향을 주지 않는다. 반대로 부모는 자식에게 영향을 준다.

     

    - 하나의 부모는 여러 자식 클래스를 거느릴 수 있지만, 반대로 자식은 여러 부모 클래스를 거느릴 수 없다.

     

    - 부모 클래스의 접근제어자가 private, default일 경우 자식 클래스는 상속은 가능하나 접근은 불가하다.

    상속 구현해보기

    상속을 구현하는 건 어렵지 않다.

     

    자식 클래스의 클래스명 뒤에 "extends + 부모 클래스명"을 입력해주기만하면 된다.

     

    부모 클래스의 코드

     

     

    class Parents{
    	
    	String name;
    	
    	Parents(){}
    	
    }

     

     

    자식 클래스의 코드

     

    class Son extends Parents{
    	
    	int age;
    	
    	Son(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	
    	public String call_name() {
    		return super.name;
    	}
    }

     

     

    실행해보기

     

    public class Test {
    	public static void main(String[] args) {
    		
    		Son person1 = new Son("손흥민", 15);
    		System.out.println(person1.name);
    		System.out.println(person1.call_name());
    		
    	}
    }

     

    위 코드를 실행하면 다음과 같은 결과를 얻을 수 있다.

     

     

    Son클래스는 Parents의 클래스를 상속받았기 때문에 부모가 가진 name 변수를 이용할 수 있었다.

     

    이때 주의할 점은 this.name은 현재 Son클래스가 별도의 name변수가 없기 때문에 부모것을 쓴 것이다.

     

    만약 Son클래스가 name이라는 변수를 가지고 있었다면, this.name은 Son클래스의 name변수를 가리킨다.

    상속 주의점

    - 상속한 뒤 자식 클래스에서 부모 멤버나 메서드의 새로운 선언(오버라이딩)이 없을 때는 그것은 그냥 부모 클래스의 것을 빌려쓰게 되는 것이다.

     

    - 이때는 부모 클래스의 수가 변하면 자식 클래스에서 참조한 변수도 바뀌기 때문에 주의 해야 한다.

     

    - 즉 초기화, 재정의 없이는 자식 클래스가 상속받은 멤버, 메서드는 내것이 되지 않는 것이다.

    '백엔드 > 자바' 카테고리의 다른 글

    클래스 / 메소드 오버라이딩(method overriding)  (0) 2020.07.28
    클래스의 super와 super()  (1) 2020.07.28
    초기화  (0) 2020.07.27
    메서드(method)에 대해서  (0) 2020.07.27
    필드와 변수(field & Variable)  (0) 2020.07.27
Designed by Tistory.