Day 24

ChangWoo·2023년 4월 28일
0

자바의 정석

목록 보기
24/71

ch 7-5,6 단일 상속, Object클래스

단일 상속(Single Inheritance)

Java는 단일 상속만(하나의 조상만을 상속)을 허용한다.(C++은 다중상속 허용)

Ex) class TvDVD extends Tv, DVD { // 에러. 조상은 하나만 허용된다.
		//.......
    }
  • 조상이 2개가 되면, 각각의 조상에 같은 이름의 변수가 존재하면 충돌 가능성이 있다.
  • 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.

  • Tv는 상속관계로 처리하고, DVD는 포함관계로 처리한다.
  • 여기서 포함은, DVD가 가질 객체들을 작성하고 DVD안의 메서드를 호출해서 사용하게끔 만든 것이다.

Object클래스 - 모든 클래스의 조상

부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.

  • Tv 클래스는 부모가 없고, SmartTv는 Tv가 부모 클래스다.
  • 컴파일 하게 되면, Tv에 extends Object를 컴파일러가 자동으로 추가해준다.
    **모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다. toString(), equals(Object obj), hashCode(),....
  • 상속계층도 : SmartTv -> Tv -> Object

ch 7-7~9 오버라이딩, 오버로딩VS오버라이딩

오버라이딩(overriding)

상속받은 조상의 메서드를 자신에 맞게 변경하는 것

Ex) class Point {
	int x;
    int y;
    String getLocation() {
    	return "x :" + x + "y :" + y;
    }
}
  • Point는 2차원 좌표 / x와 y의 위치 값을 문자열로 표현
Ex2) class Point3D extends Point {
	int z;
    String getLocation() { 		// 오버라이딩		
    	return "x :" + x + ", y :"+ y + ", z:" + z;
    }
}
  • Point3D는 3차원 좌표상의 점 / Point를 완전히 똑같이 가지고 오면 Point3D의 형식과 다르므로 오버라이딩을 통해 Point3D에 맞게 변경하였다. (선언 변경X, 내용만 변경)
  • 오버라이딩 = 선언부 변경 불가 / 내용(구현부)만 변경 가능

오버라이딩의 조건

1. 선언부가 조상 클래스의 메서드와 일치해야 한다.

  • 선언부 = String getLocation / 선언부(반환타입, 메서드이름, 매개변수 목록) 다 일치해야 한다.
    2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  • 접근 제어자 = public / protected / default / private
    3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
  • throws ~~Exception이 예외 / 조상 클래스보다 많이 선언할 수 X

오버로딩 VS 오버라이딩

오버로딩(overloading) : 기존에 없는 (이름이 같은) 새로운 메서드를 정의하는 것(new)
오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것(change, modify)

  • 오버로딩은 상속과 관계 X / 오버라이딩은 상속과 관계O
  • void parentMethod() {} = 오버라이딩
  • void parentMethod(int i) {} = 오버로딩
  • void childMethod() {} = 메서드 정의
  • void childMethod(int i) {} = 오버로딩
  • void childMethod() {} = 중복정의 // 에러 발생
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글