ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA9] 상속
    비전공자 공부일기/:: JAVA 2020. 3. 18. 18:02

    한국기술교육대학교 온라인평생교육원
    모던웹개발을 위한 JAVA9 프로그래밍
    9회차 수업

     

    학습목표

    • 상속
    • 오버라이딩
    • final 클래스
    • 추상클래스
    • Object 클래스

     

    ** 강사님 설명

     

    클래스를 재사용하는 방법은 다음 두 가지가 있다.

    1) 상속 (= 클래스 확장)

    2) 결합

     

    그 중에 오늘 배울 내용은 '상속'에 관한 것.

     

     

    슈퍼클래스와 서브클래스

     

    슈퍼클래스 = 부모클래스 = 상속을 해주는 클래스

    서브클래스 = 자식클래스 = 상속을 받는 클래스

     

     

    서브클래스 메소드의 정의와 상속

    : 아래 코드블럭과 같이 상속을 하게 되면 슈퍼클래스에 있는 모든 필드와 메소드 등을 가져오는 것이며,

    필드나 메소드를 추가하거나 메소드를 오버라이딩(내용변경) 할 수도 있다.

    //Manager 클래스를 확장해 Employee 클래스를 만든다
    public class Manager extends Employee {
    
    	추가된 필드
    	추가된 메소드 또는 오버라이딩 된 메소드
    
    }

     

    메소드 오버라이딩

    : 서브 클래스에서 슈퍼클래스 메소드를 수정해야 할 때

    메소드의 이름을 그대로 가져오지만 로직내용을 바꿔서 쓰는 것

    Employee 클래스의 몇 가지 기능을 보유하면서 관리자가 어떻게 다른지 명시

    public class Manager extends Employee {
    
    	...
    	@Override
    	public long getSalary() {
    		return super.getSalary() + bonus;
    	}
    }

    @가 붙은 키워드는 '어노테이션'라고 하며, 생략이 가능하다.
    하지만 이 메소드가 오버라이드 되었다고 명확히 알려줄 수 있기 때문에 사용을 권장

     

     

    상속관계: is-a relationship

     

    is-a 관계

    : 서브 클래스 객체를 슈퍼클래스 타입 변수에 할당 가능

    Employee emp = new Manager();
    
    ---> "Manager is a Employee"

    ---> 위 코드에서 =을 기준으로 왼쪽-오른쪽 타입이 다르지만 이 관계가 성립되려면, is-a relation이 되어야 한다.

     

    오른쪽의 객체가 왼쪽 타입의 변수에 할당이 된다.

    간단히 말하면, 왼쪽이 부모, 오른쪽이 자식이면 할당 가능!

    보통 왼쪽이 좀 더 general한 타입, 오른쪽이 좀 더 specific한 타입이 온다.

     

     

    동적 메소드 조회(Runtime Binding)

    : 메소드가 호출될 때 가상머신은 객체의 실제 클래스를 살펴보고 호출

     

    오버라이딩 때문에 생기는 기능이다.

    오버라이딩은 부모에 있는 기능을 자식이 상속받으면서 메소드를 새롭게 정의하는 건데,

    자바에서는 모든 메소드가 오버라이딩 대상이 될 수 있다.

    Employee emp = new Manager();
    emp.getSalary(); // 실제 객체인 Manager 클래스의 getSalary 메소드가 호출됨

    위 코드에서 emp라는 객체는 타입은 Employee지만 객체는 Manager이다.

    따라서 emp.getSalary() 라는 코드에서는 Manager 객체의 getSalary() 메소드가 호출된다.

     

     

    final 클래스 & final 메소드

     

    클래스 또는 메소드를 final로 선언하게 되면, '상속을 할 수 없다'는 뜻

    각각 최종 클래스, 최종 메소드라고 부른다.

     

    - 최종 클래스: 서브 클래스를 만들 수 없음

    - 최종 메소드: 서브 클래스에서 오버라이딩 불가

     

    최종 클래스, 최종 메소드는 더 이상 확장될 필요가 없기 때문에

    후기 바인딩이 아니라 전기 바인딩이 일어나며, 따라서 전체적으로 속도가 빨라진다.

     

     

    추상 클래스 & 추상 메소드

     

    구현없는 메소드를 정의해서 서브 클래스에게 메소드 정의를 강제

    - 구현이 없는 메소드를 추상 메소드라고 함

    - 추상 메소드가 포함된 클래스를 추상 클래스라고 함

    - 추상 메소드와 추상 클래스에는 abstract 제어자를 붙임

     

     

    Object 클래스

     

    자바의 모~든~ 클래스가 상속받는 클래스가 있다.

    바로  java.lang.Object 클래스이다.

     

     

     

    댓글

coding wanee