2021-06-22 강의록_상속, 다형성

5258 단어 JavaOOP상속Java

OOP 첫시간 강의록_클릭

상속 Inheritance

  • 상속없이는 다형성도 존재할 수 없다!

  • 상속 대상 : 부모의 필드와 메소드
    (생성자, 정적멤버 등 X.
    부모 클래스의 private 필드, 메소드는 제외.
    부모 클래스가 다른 패키지에 있을 경우, default 필드, 메소드 제외.
    )

  • 정적멤버는 클래스에 소속되어있으므로 => 이미 공유된다는 개념. 상속의 개념이 아니다.
    상속되는것은 인스턴스 멤버(객체 없이는 존재할 수 X => 부모객체 먼저 생성되어야 자식 객체에 물려줄 수 있다)

extends

  • 자바는 단일 상속 >> 부모 클래스 나열 불가
    class 자식클래스 extends 부모클래스 1, 부모클래스2 { ;; } <<= 불가
    인터페이스는 다중상속 가능

super

  • 자식객체 생성자의 가장 첫 줄에 위치. (부모객체가 생성되어야 자식객체가 있을 수 있으니까!)
    명시적으로 개발자가 작성하지 않으면 컴파일러가 자동으로 생성함.
    부모 클래스에 기본(매개변수 없는) 생성자가 없다면 필수 작성해야 함.
  • 이미 생성된 부모객체(힙영역) 의 주소를 가짐
	public Student(String name, String ssn, int StudentNo) {
		
		super(name, ssn);	    //부모객체의 생성자 호출 (>> 부모필드의 초기화 수행)
		
		this.studentNo = studentNo; //자식객체의 필드 초기화 수행
  • 자식 클래스에서 원래의 부모

다형성 1 규칙. 자동 타입 변환 = Promotion

부모 타입(상위 객체. LValue)에는 모든 자식 객체(하위 객체. RValue)가 대입될 수 있다. (다형성 1 규칙)


(cat == animal //true)

->> 자식객체가 부모객체로 완전히 흡수되는것이 아니다. 레퍼런스 주소는 그대로임.

->> 부모가 자식을 품으면 자식이 보이지 않는다.
(부모타입에 선언되어있는 필드, 메소드밖에 쓸 수 없음)

  • 바로 위의 부모 아니더라도 상속 계층의 상위면 자동 타입 변환 가능
    (변환 후에는 부모 클래스 멤버만 접근 가능)

다형성 2 규칙. Override = 메소드 재정의

부모클래스의 상속 메소드를 수정해 자식 클래스에서 재정의 하는 것.
다형성 1 규칙의 예외 상황.

  • 부모 클래스의 메소드와 동일한 시그니처 가져야 함.
  • 접근 제한자를 더 강하게 오버라이딩 불가
    (public 을 default나 private로 수정 불가.
    반대로 default는 public으로 수정 가능)
  • 새로운 예외(Exception) throws 불가 >> RuntimeException 은 가능. CheckedException 불가능!
    (이 때 @Override 어노테이션을 기술해줘야 컴파일러가 문법을 더 강하게 체크해 줌!)
  • 부모 메소드는 숨겨지는 효과 발생 >> 재정의된 자식 메소드 실행
    (다형성 2 규칙)
@Override
	public void fly() throws RuntimeException{		// 상속받은 메소드 재정의(다형성 2)
		log.debug("fly() invoked.");
		
		if(flyMode == SUPERSONIC) {
			log.info("초음속 비행합니다.");
		} else {
			//Airplane 객체의 fly() 메소드 호출
			super.fly();				// 부모객체의 메소드 호출(다형성 2를 우회)
			
		} //if-else
	} //fly

다형성 Polymorphism

같은 타입이지만 실행결과가 다양한 개체 대입(이용)가능한 성질.
부모 타입에는 모든 자식 객체가 대입 가능 ( 자식은 부모 타입으로 자동 타입 변환)
->> OOP의 핵심인 객체조립이 가능해진다

  • 부품객체들이 있을 때, 실행클래스의 메소드 매개변수 타입은 부모타입(즉 다형성 구현)으로 선언해야 함.
  • 다형성을 메소드에 적용하든, 지역변수로 적용하든, 필드로 적용하든.

좋은 웹페이지 즐겨찾기