7-5 단일 상속
단일 상속: 하나의 부모만 상속
왜 단일상속만 허용할까?
만약 Tv클래스와 DVD클래스에 power(){} 메서드가 있다고 하자.
Tv클래스는 power(){A}
DVD클래스는 power(){B}
라고 한다면 어느 것을 상속받아야 하는가?(이름은 같지만 내용은 다른 메서드)
이런 충돌문제가 발생할 수 있다.
나중에 인터페이스를 이용하면 충돌 문제도 해결할 수 있다.
인터페이스를 안쓰고도 다중 상속처럼 편리하게 작성하는 방법은
비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
포함이 뭐냐면 DVD객체를 만들어놓고 DVD가 가진 메서드를 작성함.
코드를 실제 만든게 아니라 DVD가 갖고 있는 메서드를 호출했다.
dvd.play(); < 이렇게 호출한다.
void play() {} < 물론 메서드들을 만들어줘야 한다.
이렇게 하면 쉽게 다중 상속의 효과를 낼 수 있다.
7-6 Object클래스 - 모든 클래스의 (최고) 조상
-부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.
-모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다.
예: toString()
상속 관계도의 끝에는 항상 Object클래스가 있다.
class Circle 이렇게 있다면
컴파일할 때 컴파일러가 extends Object를 자동으로 추가해준다.
1. Circle클래스에 toString()이 없는데 c.toString()을 사용할 수 있는 이유는?
Circle은 다른 클래스로부터 상속받지 않아서
자동으로 Object클래스를 상속받는다.
Object클래스 안에 11개의 메서드가 있는데 toString()이 그중에 하나다.
그래서 참조변수 c를 통해서 Circle클래스 toString()을 사용할 수 있다.
2. 사진에 드래그된 두 문장은 같다.
c.toString()를 호출하나 c를 출력하나 똑같은 결과가 나온다.
이것은 println메서드 기능이다.
println(참조변수)이 이렇게 참조변수가 들어오면 내부적으로 toString을 호출한다.
그래서 System.out.println(c); //Circle@3d012ddd
System.out.println(c.toString()); //Circle@3d012ddd
둘이 같은 거다.
toString메서드는 클래스이름@객체주소값(정확히 객체주소값은 아니다.)을 찍어준다.
객체마다 다른 값이 나온다.
'프로그래밍 언어 > 자바의 정석 기초편' 카테고리의 다른 글
자바의 정석 기초편 ch7-10,11 참조변수 super, 생성자 super() (0) | 2022.08.19 |
---|---|
자바의 정석 기초편 ch7-7~9 오버라이딩 (0) | 2022.08.17 |
자바의 정석 기초편 ch7-3,4 클래스 간의 관계, 상속과 포함 (0) | 2022.08.17 |
자바의 정석 기초편 ch7-1,2 상속 (0) | 2022.08.16 |
자바의 정석 기초편 ch6-38~41 변수의 초기화, 멤버변수의 초기화 (0) | 2022.08.03 |