[Java] 상속

Hyemin_12·2022년 5월 2일
0

Java

목록 보기
3/3
post-thumbnail

상속

상속

  • 기존에 있는 클래스의 멤버 변수나 메소드를 물려받아 새로운 클래스를 만드는 것이다.
  • 클래스를 계속 만들기 귀찮으니까 이미 만들어진 클래스를 재사용 하기 위해 사용한다.
  • 상속을 이용하여 새로운 클래스를 정의 ->
    기존의 클래스의 멤버 변수나 메소드를 수정 없이 사용 가능
상속 하는 클래스상속 받는 클래스
수퍼 클래스서브 클래스
상위 클래스하위 클래스
부모 클래스자식 클래스
  • 상속 관계에 있는 클래스 간의 관계 : is - a, 서브 클래스는 수퍼 클래스이다.
    ex) 택시는 자동차이다.
    팩스 전화기는 전화기이다.
    경영자는 고용인이다.

상속 방법

접근제어자 class 클래스명 extends 상위클래스명
  • "extends" 키워드를 사용한다.
  • 자바는 단일 상속만 지원 -> extends 뒤에는 하나의 클래스명만 와야한다.
  • 모든 클래스는 최상위 클래스인 Object 클래스를 자동으로 상속받는다.
  • 상속 관계에서 접근 제어자가 protected일 경우 하위 클래스에서 접근할 수 있지만, private일 경우는 상속 관계에서도 접근이 불가능하다.

상속과 생성자

  • 상속 과정에서 생성자는 상속이 불가능하다.
  • 하위 클래스 객체 생성 시 자동으로 상위 클래스 인자 없는 생성자를 호출한다.
    > 생성자가 상위 클래스에 없을 때는 디폴트 생성자( 생성자명( ){ } )를 실행한다.
    > 상위 클래스에 인자 있는 생성자만 있는 경우엔 에러를 발생한다.

super 키워드, super( ) 메소드

  • 상속 관계에 있는 클래스에서 상위 클래스의 멤버 변수나 생성자를 호출하기 위해 사용한다.

super 키워드

super.상위 클래스의 멤버 변수
super.상위 클래스의 메소드명()
  • 상위 클래스의 멤버 변수나 메소드를 명시적으로 호출할 때 사용한다.

super( ) 메소드

super()
super(인자, ...)
  • 상위 클래스의 생성자를 명시적으로 호출할 때 사용한다.
  • 하위 클래스의 생성자 중 제일 먼저 호출해야 한다.

상속과 메소드 오버라이딩

  • 메소드 오버라이딩
    > 상위 클래스에 있는 메소드와 똑같은 메소드를 하위 클래스에서 재정의하여 사용하는 것이다.
    > 상위 클래스와 같은 이름으로 하위 클래스에서 메소드의 기능을 바꾸는 것이다.
    > 상위 클래스에 기능을 추가하는 것이다.
  • 메소드 오버라이딩이 된 경우에는 특별한 지시가 없는 한 하위 클래스의 메소드(재정의를 한 메소드)를 호출한다.
  • 메소드 오버라이딩의 조건
    > 상위 클래스의 메소드와 메소드명, 매개변수의 타입 · 개수, 리턴 타입이 같아야 한다.
    > static, final, private 메소드는 오버라이딩 할 수 없다.

형변환

  • 참조 데이터형 : 배열, 클래스 등
  • 다른 참조 데이터 할당이나 다른 클래스로 객체를 생성하고자 할 때 일어난다.
  • 묵지석 형변환(업 캐스팅)과 명시적 형변환(다운 캐스팅)이 있다.
  • 참조 데이터 형변환의 조건
    > 상속 관계에 있는 클래스 간에만 형변환이 가능하다.
    > 서로 다른 종류의 클래스 간에는 형변환이 안된다.
    > 상위 클래스 참조 데이터 변수는 하위 클래스 객체를 참조 가능하다.
    (그 반대는 X)

업 캐스팅(Up Casting)

  • 특정 객체가 하위 클래스의 형에서 상위 클래스의 형으로 형변환 하는 것이다.
  • 형만 정확하다면 묵시적으로 형변환 된다.
public class Animal{}
public class Dog extends Animal{}
...
Animal a = new Dog(): // 자동으로 Dog 객체를 업 캐스팅 함

다운 캐스팅(Down Casting)

  • 캐스팅한 것을 원래대로 복구시킨다.
  • 업 캐스팅된 것만 다운 캐스팅이 가능하다.
  • 강제 캐스팅을 원칙으로 한다. (명시적)
class DownCast extends Object{..}

Object o = new DownCast(); // 업 캐스팅
DownCast d = (DownCast)o; // 다운 캐스팅

가상 메소드

  • 상위 클래스의 이름으로 하위 클래스의 메소드를 호출하는 기법이다.
  • 업 캐스팅 했을 때 상위 클래스의 이름으로 하위 클래스의 메소드를 호출한다.
    -> 원래는 접근을 못하지만 업 캐스팅을 했기 때문에 호출 가능
class Shape{
    public void draw(){
        System.out.println("도형 그리기");
    }
}
class Circle extends Shape{
    private String type = "원";
    public void draw(){
        System.out.println(type + " 그리기");
    }
    public void painting(){
        System.out.println("색 칠하기");
    }
}
public class DrawingExam {
    public static void main(String[] args){
    	Circle c = new Circle();
        c.draw();
        c.paining();
    
    	// 가상 메소드
        Shape s = new Circle(); // 업 캐스팅
        s.draw(); // Shape 클래스의 draw를 호출한다.
        // s.painting(); // 접근 불가능
    }
}
profile
개발 블로그🌱

0개의 댓글