@ 상속의 조건
아래 조건과 필요가 충족되지 않으면 상속을 안하는 것이 좋다.
* IS-A관계
: IS-A 관계란 하위 클래스를 상위 클래스로 부를 수 있어야한다.
예를 들면,
핸드폰 -> 스마트폰
여기서 핸드폰은 상위클래스이고, 스마트폰은 하위클래스이다.
이 때, 우리는 스마트폰을 핸드폰이라고 말할 수 있다.
스마트폰 IS A 핸드폰
이 관계를 IS-A 관계라고 부른다. 이 조건을 만족하지 않는다면 상속을 하지 않는 것이 더 좋다.
* HAS-A 관계
: HAS-A 관계란 하위클래스가 상위클래스를 가지고 있다는 의미이다. 이 경우 상속을 사용할 수 있지만, 왠만하면 쓰지 않는 것이 좋다.
이유는 가지는 게 추가해야될 때 고치기 힘들다. 자바에서는 중복상속이 안되기 때문이다.
그렇기 때문에 HAS-A 관계에서는 복합관계로 대신하는 것이 좋다.
@ 메소드 오버라이딩
: 메소드 오버라이딩이란 상위클래스에서 정의한 메소드를 다시 정의한 것이다. 메소드의 이름과 반환형, 매개변수의 선언이 완전이 일치할 때 메소드 오버라이딩이된다.
참조 변수를 이용해서, 인스턴스의 오버라이딩 된 메소드를 호출하면, 상위클래스가 아닌 하위 클래스의 메소드가 호출된다.
하위 클래스에서 오버라이딩 된 상위 클래스의 메소드를 호출하려면 키워드 super를 사용한다.
쉽게 말하면 오버라이딩이 되면 하위 클래스에서 재정의 된 메소드로 호출이 되고, 그 전의 메소드들은 가려지게 된다. 그 전의 메소드는 호출이 불가능하다.
여기서 조금 복잡한 내용인데,
상속에 있어서 인스턴스 참조관계를 일반화 해서 정리하면
AAA -> BBB -> CCC ( 상속 관계)
AAA ref1 = new BBB();
AAA ref2 = new CCC();
BBB ref3 = new CCC();
위를 보면 ref1, ref2는 클래스 AAA로 바라봐진다. ref3는 클래스 BBB로 바라봐진다.
ref1은 BBB로 인스턴스가 생성되지만 AAA 취급을 받는다.
ref1은 AAA의 메소드만 이용할 수 있다.
* XXX 클래스의 참조변수는 XXX 클래스의 이느턴스, 또는 XXX를 상속받는 하위 클래스의 인스턴스를 참조할 수 있다.
* 참조변수의 자료형에 상관없이 마지막으로 오버라이딩을 한 메소드만 호출된다.
(가려지기 때문이다.)
문제 15-1
오버라이딩을 이용해 같은 메소드로 다른 메소드로 연결시킨다.
(코드)
(동작화면)
-> 오버라이딩으로 자료형에 상관없이 같은 메소드로 다른 메소드처럼 동작하였다.
@ 상속의 목적
“상속을 통해 연관된 일련의 클래스에 대한 공통적인 규약을 정의할 수 있다.”
이 뜻은 상속이 된 클래스들에 대해 일괄적으로 다룰 수 있게 된다는 이야기 이다.
상속을 계획하여 설계하고 이러한 이득을 얻을 수 있다.
* Object 클래스
: java.lang 패키지에 묶여있는 클래스이다. 보통 다른 어떤 클래스도 상속하지 않으면 Object 클래스를 상속하게 된다.
Object클래스 안에는
public String toString() 메소드가 정의되어있다.
그렇기 때문에 이 toString을 오버라이딩하여 사용할 수 있다.
* final 클래스와 final 메소드
: final 선언이 된 클래스는 상속되지 않는다.
또 final로 선언된 메소드는 오버라이딩을 허용하지 않겠다는 의미이다.
(*참조 - 난 정말 JAVA를 공부한 적이 없다구요, 윤성우)
'Programing > JAVA 일지' 카테고리의 다른 글
JAVA(10일차) - (1) abstract, interface, inner class, 전화번호관리 프로그램(05) (0) | 2016.12.21 |
---|---|
JAVA(9일차) - (2) 전화번호 관리 프로그램4 (0) | 2016.12.11 |
JAVA(8일차) - 클래스의 상속(1) (0) | 2016.12.09 |
JAVA(7일차) - (3) 전화번호 관리 프로그램3 (0) | 2016.12.08 |
JAVA(7일차) - (2) 전화번호 관리 프로그램2 (0) | 2016.12.08 |