백엔드/Java

[Java] 상속과 오버라이딩 , 오버로딩 (자바의 정석 참고)

Se Yeon 2022. 9. 27. 11:31

상속(inheritance)이란 ?

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

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


포함관계 :   포함관계는 상속과 같은 방식으로 관계를 맺는 게 아닌 클래스 내에서 다른 클래스의

인스턴스를 생성하면 포함 관계라고 볼 수 있다.  쉽게 말해 한 클래스의 맴버로 참조변수를 선언하는 것 

class Circle {
	int x;
    int y;
    int r;
   }
class Circle {
	Point c = new Point();
     int r;
    }

circle이 Point를 포함하고 있다.

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

포함관계

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

참조변수는 꼭 new ();로 

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

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);

// 실행결과는 같다.

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;
      }
    }

 

오버라이딩의 조건 

오버로딩과 오버라이딩

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

class Parent {
	void parentMethod() {}
   }
   
   class Child extends Parent {
   	void parentMethod() {}  // 오버라이딩
    void perentMethod(int i ) {}  //오버로딩
    
    void childMethod() {}  // 메서드 정의
    void childMethod(int i ) {}  // 오버로딩