ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] enum, extends, overriding
    개발 강의 정리/JAVA 2021. 6. 22. 14:01

     

     

     

    1. enum

    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY ;   //열거 타입에 열거상수 이외의 다른 소스를 넣을때 세미콜론 처리 해줘야한다. 

    ================================================================
    default constructor invoked
    default constructor invoked
    default constructor invoked
    default constructor invoked
    default constructor invoked
    default constructor invoked
    default constructor invoked


    단순히 상수만 생성하는게 아니라 생성자를 호출하는 구문이었다 ! (대신 매개변수 없는 생성자를 호출하는 것! )
    클래스와 다르게 생성자 호출을 new가 하는게 아니라 열거 상수가 자동으로 호출한다.
                                                             => 우리가 생성하지 않아도 힙에 객체로 생성되어야 하기 때문에! 

    => 열거 상수 하나하나가 객체이다. 

     

    enum 타입의 생성자

     

    enum 타입의 생성자는 public >XXX
                                  default > OK
                                  private >OK 권장함

     

     

    enum 타입에 선언된 필드는 누구의 필드일까?

    =>열거 상수 객체의 필드가 된다

     

    private String name; //생성자로 열거 상수 객체가 생성이 되고.
    private int age; //이 열거 상수 객체의 필드가 되는 것이다.

     

    그러나 위의 enum 타입 방식은 실무에서 잘 쓰이지 않는다. 

     

    2. OOP의 상속

    상속이란?? implements 키워드나 extends 키워드를 이용하여 상속받는것. 

     

    부모없는 자식 없다!
    자식 객체가 생성되기 전에 부모 객체가 우선 생성된다
    때문에 자식 클래스의 생성자 블록에서 가장 "첫줄"에(안 하면 컴파일 오류) 부모클래스의 생성자를 호출하도록 해서
    부모객체의 필드가 우선 초기화 되도록 해야함 

     

    부모 클래스에 매개 변수 없는 생성자만 있을때 자바 컴파일러가 자동으로 super 키워드를 추가해주지만

    매개변수 있는 생성자가 있다면 자바 컴파일러는 자동으로 super 키워드를 추가해주지 못하기 때문에

    반드시! 명시적으로 super 키워드를 추가해야한다. 

     

    3. 오버라이딩(메소드 재정의)

    : 부모 클래스의 상속 메소드를 수정해 자식 클래스에서 재정의 하는 것. 

     

    <메소드 재정의 조건>

    1. 부모 클래스의 메소드와 동일한 시그니쳐를 가져야한다. 

    2. 단, 접근제한을 바꿀 수는 있다. (더 강하게만 바꿀 수 있다. ex. default => private)

    3. 새로운 예외(Exception) throws 불가

       => 부모 클래스에서 throws 한 예외만 던질 수 있고, 자식클래스에서 추가적으로 다른 예외 throws 불가

     *RuntimeException은 가능. 

    4. final 키워드가 붙은 메서드는 더이상 재정의 할 수 없다! 

     

    //부모클래스
    public void method() throws AException{

    }//method

    //자식 클래스
    @Override
    public void method () throws AException, BException{ 불가

    }//method

     

    <메서드 재정의 효과> *다형성2*

    부모 메서드는 숨겨지는 효과 발생

      - 재정의된 자식 메소드 실행

     

    자식 클래스에서 수정 되기 전 부모 메서드 호출 - super

     

    super.부모메소드();

     

    <타입변환과 다형성>*다형성1*

    다형성: 같은 타입이지만 실행결과가 다양한 객체에 대입(이용) 가능한 성질

     

    *부모 타입에는 모든 자식 객체가 대입가능

       - 자식 타입은 부모 타입으로 자동 타입 변환

       

        => 부모가 자식을 완전히 감싼다.

             아무리 자식이 들어갔어도 사용할 수 있는 필드와 메서드는 부모의 필드와 메서드만 가능하다.  

             그러나! 자식Class에서 재정의(Override)된 메서드는 자식 Class의 재정의된 메서드를 호출 가능하다. 

     

    효과: 객체 부품화 가능

     

    1. 자동 타입변환 (Promotion)

      : 작은 타입에서 큰 타입으로 자동 타입 변환이 되는 것. 

    부모Class 변수명 = 자식Class타입;

     

    2. 강제 형변환(Casting)

    오버라이딩 되지 않은 자식 클래스의 메소드를 이용하려면 강제 형변환을 해야한다. 

     

Designed by Tistory.