재유's

[JAVA] 상속 (Inheritance)과 다형성(Polymorphism) 본문

IT Story/Java

[JAVA] 상속 (Inheritance)과 다형성(Polymorphism)

Stella_NY 2018. 12. 11. 13:04

상속성(Inheritance)

  • 두 개의 클래스 간에 부모 자식관계를 형성
1
public class 자식클래스 extends 부모클래스 { ... }



  • 부모클래스를 자식클래스가 상속받을 때, 자식은 부모의 모든 멤버변수와 메서드를 자신의 것으로 상속 받는다.
  • (단, private로 설정된 기능은 상속되지 않는다.)
 

public

protected 

private 

상속 가능 여부

O

O

X




상속의 활용

  • 기능의 확장
    • 클래스 A가 B에게 상속된 경우 B는 A의 기능에 새로운 기능을 추가한 개념이 된다.

1
2
3
4
5
6
7
8
public class A{
    int a;
    int b;
}
 
public class B extends A {        // <-- a, b에 c라는 기능을 추가
    int c;
}




  • 공통 기능의 모듈화
    • 두 클래스 간에 공통되는 기능이 존재할 경우 그 기능을 별도의 클래스로 분리하여 상속처리
1
2
3
4
5
6
7
public class Common{
    int a;
    int b;
}
 
public class Hello extends Common{ ... }
public class world extends Common{ ... }






다형성 (Polymorphism)


  • 오버라이드 (Override)
    • 자식 클래스가 부모 클래스와 동일한 이름의 메서드를 정의한 경우 부모 클래스의 기능은 자식에게 가려진다.
    • 즉, 부모의 기능을 재정의 한다. ( 기능의 변경 )
    • 모든 자식클래스가 동일한 이름의 메서를 갖게 되므로 각 객체에 대하여
      같은 메소드 명을 사용하여 서로 다른 형태를 구현할 수 있다.
1
2
3
4
5
6
7
8
9
public class Parent{
    public void foo(){...}
    public void bar(){...}
}
 
public class Child extends Parent {
    // child의 객체를 통해서 bar를 호출한 경우 부모의 기능은 사용되지 않는다.
    public void bar() {...}
}




  • super 키워드

 - 클래스의 상속관계에서 자식 클래스가 부모 클래스를 가리키는 예약어

=> 부모의 기능을 변경(오버라이드)하는 과정에서 부모의 원래 기능을 보전해야 할 필요가 있는 경우 사용


1
2
3
4
5
6
7
8
9
10
public class Parent{
    public void bar() { ...}
}
 
public class Child extends Parent {
    public void bar(){
    super.bar();             // <-- 부모의 원본 기능을 의미
    ...                        // <-- 부모의 기능을 확장하는 의미
    }
}



  • 상속관계의 생성자
- 생성자가 정의된 클래스를 상속받은경우(부모가 생성자를 갖는경우)에는 자식 클래스의 생성자를 통해서 부모 생성자를 강제로 호출해야 한다.

1
2
3
4
5
6
7
8
9
 public class Parent{
    public Parent(int a) { ... }    // <-- 부모 클래스 생성자 (기본생성자 x)
}
 
public class Child extends Parent {
    public Child(int a){
        super(a);     // <-- 부모의 생성자를 의미
    }
}



'IT Story > Java' 카테고리의 다른 글

[JAVA] Inner Class & Anonymous class  (0) 2018.12.12
[JAVA] For문 (반복문)  (0) 2018.12.11
[JAVA] 싱글톤 (SingleTon)  (0) 2018.12.11
[JAVA] Static  (0) 2018.12.11
[JAVA] 은닉성 (encapsulation)  (0) 2018.12.07
Comments