728x90
반응형

상속

 상속의 장점

 - 상속을 통하여 기존 클래스의 필드와 메소드를 재사용

 - 기존 클래스의 일부 변경도 가능

 - 상속을 이용하게 되면 복잡한 GUI프로그램을 순식간에 작성

 - 상속은 이미 작성된 검증된 소프트웨어를 재사용

 - 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수

 - 코드의 중복을 줄일 수 있다.

 

  class SubClass extends SuerClass (extends:상속을 의미한다. 수퍼클래스를 확장하여 서브 클래스를 작성한다는 의미) (SuperClass: 부모클래스)

 {

        ... //추가된 메소드와 필드

  }

 

상속의 정의

 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것

 두 클래스를 부모와 자식으로 관계를 맺어주는 것

 자식은 부모의 모든 멤버를 상속받는다.

 자식의 멤버개수는 부모보다 작을 수 없다. (같거나 많아야 한다.)

 

클래스간의 관계 - 상속관계

 공통 부분은 부모 클래스에서 관리하고, 개별 부분은 자식 클래스에서 관리한다.

 부모의 변경은 자식에게 영향을 미치지만, 자식의 변경은 부모에게 영향을 주지 않는다.

 

 

단일상속

 java는 단일상속만을 허용한다. 하지만 인터페이스를 사용하여 다중상속의 효과를 낼 수 있다. ( C++은 다중상속 허용 )

    class TVCR extend TV,VCR {

       ...

    }   //이와 같은 표현은 허용하지 않는다.

 

 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.

<상속과 포함>

 

 

상속에서 접근 지정자

 private (X)

 protected (O)

 package (O)

 public (O)

 

<접근 지정자>

 

 

 

 

메서드 재정의 (오버라이딩)

 메서드 재정의 : 자식 클래스가 필요에 따라 상속된 부모의 메서드를 변경하여 사용하는 것

 주의할점 :

 - 메서드의 헤더(머리부분)은 그대로 두고, 바디(몸체부분)만 교체하는 것이다.

 - 메서드의 헤더 부분은 부모 클래스의 헤더와 동일해야 한다. (메서드 이름, 반환타입, 매개변수의 개수와 데이터타입이 일치해야 한다.)

 - 메서드가 public으로 선언되어 있는 경우에만 재정의가 가능하다. private메서드는 오버라이딩할 수 없다.

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

   예를 들어, 부모 클래스의 메서드가 protected로 선언되어 있는 경우에 자식클래스의 재정의 메서드는 protected나 public으로만 선언 가능하다.

 

<메서드오버라이딩>

 

 

 

재정의 (오버라이딩)와 중복정의 (오버로딩)의 차이점

 메서드 오버라이딩(재정의) : 부모클래스를 상속받은 자식클래스에서 부모의 메서드를 변경하여 사용하는 것

 메서드 오버로딩(중복정의) : 같은 클래스 안에서 이미 정의된 메서드를 변경하여 사용하는 것

 

<오버로딩>

 

 

 

super 키워드

 - 상속관계에서 부모 클래스의 변수나 메서드를 참조하기 위해 사용되는 키워드

 - super를 사용하여 부모클래스의 변수나 메서드를 호출할 수 있다.

 - 메서드를 재정의할 때, 부모클래스의 메서드를 완전히 다른 것으로 바꾸는 경우보다 내용의 추가하는 경우가 많다.

   이런 경우에 super 키워드를 사용하여 부모 클래스의 메서드를 호출한 뒤 필요한 부분을 추가하여 사용하면 된다.\

 

 

 

<super생성자>

 

 

 

Object클래스

 - 부모클래스를 정의하지 않으면 자동으로 Object클래스가 부모클래스가 된다.

 - 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받을 수 있다.

 - Object 클래스는 java.lang 패키지에 들어 있으며 자바 클래스 계층 구조에서 맨 위에 위치하는 최고의 조상 클래스

 

Object의 메서드

 protected Object clone()

 -> 객체 자신의 복사본을 생성하여 반환한다.

 public boolean equals(Object obj)

 -> obj가 이 객체와 같은지를 나타낸다.

 protected void finalize()

 -> 가비지 콜렉터에 의하여 호출된다.

 public final Class getClass()

 -> 객체를 생성한 클래스 정보를 반환한다.

 public int hashCood()

 ->객체에 대한 해쉬 코드를 반환한다.

 public String toString()

 -> 객체의 문자열 표현을 반환한다.

 

 

getClass()메서드

 - 객체가 어떤 클래스로 생성되었는지에 대한 정보를 반환하는 메서드

>> getClass

 

 

 

equals()메서드

 - 두개의 객체를 비교하여 같으면 ture를 반환하는 메서드

 - equals() 메서드는 재정의(오버라이딩)하여 사용해야 한다.

>>equals

 

 

 

toString()메서드

 - Object 클래스의 toString() 메서드는 객체가 가지는 값을 문자열 형태로 반환하는 메서드, 객체가 생성되면 자동 호출된다. 오버라이딩하여 사용한다.

>>tostring

 

 

 

final 클래스와 final 메서드

 - 클래스에 final 키워드를 붙이면 상속할 수 없는 클래스

 - 메서드에 final 키워드를 붙이면 오버라이딩할 수 없는 메서드

>>Final

728x90
반응형

+ Recent posts