JAVA 17강_오버라이딩

YEONG EUN LEE (Chloe)·2023년 12월 27일
0

JAVA 기초

목록 보기
22/42
post-thumbnail

오버라이딩

: 부모와 자식관계에서 동일한 이름의 메소드가 있는 경우(매개변수까지 동일한 경우) 부모메소드가 가려지고(Hiding) 자식의 메소드로 재정의되는 현상(덮어쓰기가 되는 현상)

오버라이딩의 조건

  1. 반드시 상속관계가 존재해야 한다.
  2. 반드시 부모와 메소드가 동일해야한다.(매개변수까지 동일)
  3. 반드시 부모보다 접근제어자가 부모이상의 제어자로 선언되어야 한다.

상속에서 static이 붙은 경우

  • 클래스명.으로 접근가능함.
// 상속에서 static이 붙은 경우

class C1{
	static int x;
	static int y;
}


// 클래스 변수도 상속됨
class C2 extends C1{
	static String x;
}


public class InhEx06 {
	public static void main(String[] args) {
		C2.x = "알기쉽게 해설한 자바"; // ----> C2.x 접근가능함.
		// C1  클래스에서 선언된 int x는 가려짐
		C2.y = 20000; // ---> 상속받은  C1.y로 접근함.
		C1.x = 30000; // C1.x로 int 형식, 상속이 아님.
		System.out.println("C2.x : " + C2.x);
		System.out.println("C2.y : " + C2.y);
		System.out.println("C1.x : " + C1.x);

	}

}

private으로 제한된 부모의 멤버필드는 자식에게 상속되지 않는다.
자식에게 같은 이름으로 선언할 수 있음. 재정의 가능

오버라이딩과 오버로딩의 차이점

  1. 오버로딩
    -리턴타입을 맞출 필요는 없다.
    ex)
    public void setA(){...}
    public int setA(int a){...}
  • 상속관계에서도 오버로딩이 존재함.
    부모클래스
    (1)public void md() {...} // 하이딩
    (2)public void md(int a){...} // 오버로딩

  • 자식클래스 extends 부모클래스
    (3)public void md() {...} // 오버라이드
    (4)public void md(String a){...} // 오버로딩 ---> 상속 관계에서도 오버로딩이 존재

  1. 오버라이딩
    -반드시 재정의(덮어쓰기) 리턴타입까지 동일해야 함.

ex) 부모 public void setA(int a){ ... }
자식 [defualt|protected|public] void setA(int a){....}

super()

: 생성자 호출의 가장 마지막에 기본으로 숨겨져 있다고 생각해야함

super와 this의 차이점

  1. this
    this. 키워드 자기자신의 변수 : 나의 인스턴스
    this() 호출문 : 나의 인스턴스 안의 기본생성자 호출
    this([매개변수]) 호출문 : 나의 인스턴스 안의 해당 케이스의 기타 생성자 호출

  2. super
    super. 키워드 : 부모 인스턴스 --> 부모 안에서 사용불가, 무조건 자식에서, 순서 상관없음
    super () 호출문 : 부모 인스턴스의 기본 생성자 호출( 자동으로 숨겨있다.)
    super(매개변수...) 호출문 : 부모 인스턴스 안의 해당 케이스의 기타 생성자 호출(반드시 기술해야함)
    자식의 생성자의 가장 처음에 기술해야함. 딱 한번만 호출 가능함.

0개의 댓글