[Java] 상속과 오버라이딩(Overriding)

연이·2022년 10월 12일
1

Java 기초

목록 보기
2/5

🌱 상속(inheritance)이란 ?

상속은 캡슐화, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나로 상위 클래스의 맴버변수와 메서드를 하위클래스가 물려받는 기술을 의미한다.

자바에서 상속을 구현할 때는 extends 예약어를 사용한다.

  • 포함관계 : 포함관계는 상속과 같은 방식으로 관계를 맺는 게 아닌 클래스 내에서 다른 클래스의 인스턴스를 생성하면 포함 관계라고 볼 수 있다. 쉽게 말해 한 클래스의 맴버로 참조변수를 선언하는 것
class Circle {
	int x;
    int y;
    int r;
   }
class Circle {
	Point c = new Point();
     int r;
    }

circlePoint를 포함하고 있다.

  • 상속관계
    : '~은 ~이다'

  • 포함관계

    : '~은 ~을 가지고 있다.'


단일상속 : 하나의 부모 클래스로부터의 단일 상속을 받는것을 일컫는다. 둘 이상의 부모 클래스로부터 상속을 받을 수 없다.

class TvDVD extends Tv, DVD {
	//이럴경우에는 에러가 난다 
    // C++은 다중상속 허용
}

  자바는 다중 상속이 아닌 단일상속만 허용한다.
그 이유는 이름이 같은 메서드 호출 시에 충돌이 일어날 수 있기 때문이다.
그렇기 때문에 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다

나중에 인터페이스에서 이러한 충돌문제를 해결할 수 있다고 한다 . 이 부분은 인터페이스 공부할때 정리해봐야지

☁️ oject 클래스

모든 클래스의 조상

부모가 없는 클래스는 자동적으로 object 클래스를 상속받게 된다.
object에 정의된 메서드는 총 11개가 있으며 equals(), hashCode(), toString() 등이 있다.

Object c = new Object();
System.out.println(c);
System.out.println(c.toString);

// 실행결과는 같다.

⛅️ 오버라이딩 (Overriding)

상속받은 조상의 메서드를 재정의하는 것

class point {
	int x;
    int y;
    
    String getLocation()
    	return "x : " + x + ", y : " + y;
        }
       }
       
  class Point3D extends Point {
  	int z;
    
    //조상의 getLocation()을 오버라이딩
    String getLocation() {
    	return "x : " + x + " , y : " + y + ", z : " + z;
      }
    }

💦 오버라이딩의 조건

  1. 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야한다. (단, 메소드의 반환 타입은 부모 클래스의 반환 타입으로 변환할 수 있는 타입이라면 변경할 수 있다.)

  2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.

  3. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.

⛄️ 오버로딩과 오버라이딩

오버로딩오버라이딩

  • 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것 (new)
  • 오버라이딩: 상속받은 메서드의 내용을 변경하는 것
class Parent {
	void parentMethod() {}
   }
   
   class Child extends Parent {
   	void parentMethod() {}  // 오버라이딩
    void perentMethod(int i ) {}  //오버로딩
    
    void childMethod() {}  // 메서드 정의
    void childMethod(int i ) {}  // 오버로딩

본 게시글은 자바의 정석을 참고하여 작성하였습니다.
https://github.com/castello/javajungsuk_basic

0개의 댓글