- 기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
사용방법 !
class 자식클래스 extends 부모클래스 {}
// 어떤클래스가 부모인지 extends 뒤에 붙여주면 됨.
- 자손은 조상의 모든 멤버를 상속 받는다.(생성자,초기화 블럭 제외)
여기서 조상은 (부모의 부모 등~)
- 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다)
- 자손의 변경은 조상에 영향을 미치지 않는다.
** 클래스의 관계는 상속과 포함이 있다
- 포함은! 클래스의 멤버로 참조변수를 선언하는 것
상속관계 : '~는 ~이다.(is-a)'
포함관계 : '~는 ~을 가지고 잇다. (has-a)'
관계를 설정할 때, 뭐가 맞는지 헷갈린다면!
위처럼 문장을 만들어서 생각해보자
ex)
원은 점이다. - is a
원은 점을 가지고 있다. - has a
아래가 더 자연스럽다. 그럼 포함관계가 맞을듯 ~
절대적이진 않지만 이렇게 이해하면 쉬워용
대부분의 경우는 포함이 더 많음!!!!
상속은 여러가지 제약이 많기 때문에 꼭 필요할때만..
- java는 단일 상속만을 허용한다.(C++은 다중상속 허용)
- 단일 상속이란? -> 하나의 부모만 상속 받을 수 있음
class TvDvd extends Tv, DvD { //에러남, 티비나 디비디중 하나 골라야해
- 만약 그 부모가 ~ 이름 똑같고 내용 다른 메소드가 있음 어케, 어떤걸 상속받아야될지 모르자너
- 그래서 다중 없음 ~
- 인터페이스를 이용하면 충돌 문제를 해결하면서, 다중상속과 같은 효과를 냄
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다!
- 부모가 없는 클래스는 자동적으로 object클래스를 상속 받게 된다.
- 모든 클래스는 object클래스에 정의된 11개의 메소드를 상속 받는다.
toString(), equals(Object obj), hashCode(), ...
다시 배울거니까 넘어가자 ~
toString -> 클래스 이름@객체의 주소값 찍어줌
c.toString 일케 하나 걍 c 만 찍나 똑같은 값 나옴 // 여기서 c는 임의의 이름
* 생략 가능한 것
import java.lang.*
default 생성자
this
0번재 매개변수. (얘는 뭘가?)

- 출처승미블로그 ㅎ
super : 부모로부터 받은 멤버와 자식의 멤버 이름이 같을때 부모 멤버에 접근하기 위해 사용
super() : 부모생성자를 호출, 생성자내에서만 사용이 가능하고 반드시 첫번재 줄에 와야한다
설정하지 않으면 부모의 default 생성자를 자동으로 호출한다.
오버라이드 : 부모의 메소드와 똑같은 메소드를 자식이 만들어서 사용.
메소드 호출시 오버라이드 된 메소드가 실행.
부모의 접근제한자보다 자식의 접.제는 크거나 같아야한다
private < default < protected < public
부모에 없는 예외전가를 자식은 만들 수 없다
throws IOException -> 예외 전가 -> 미루겠다
//disp()메소드를 실행하는데 IOException이 발생할 수 있습니다. 만약에 발생이 되면
disp()메소드를 호출한 곳에서 처리하겠습니다.
protected
상속관계에서는 public 처럼 접근 가능,
상속관계가 아니라면 default처럼 접근 가능(즉, 같은 패키지 내에서만 접근할 수 있다)
다른패키지는 접근 불가!!
투스트링 겟
class A05 extends Object{
@Override
public String toString() {
return "A05클래스입니다.";
}
}
public class Exam_05 {
public static void main(String[] args) {
A05 ap = new A05(); //ap 는 주소값 / 실제 데이터는 힙에 들어있고.힙을 가리키는 ap의 주소값ㅇ ㅣ들ㅇ가있고 이런걸 참조변수라고함.
System.out.println("ap.getClass= " + ap.getClass()); //ap객체의 클래스타입을 알려줘! 모든클래스는 오브제트 프로젝트를 상속받고있기때문에.. /
System.out.println("ap.toString= "+ ap.toString()); //클래스의 정의, 내용, 주로 써준다.
//객체명만 출력시키면 .toString이 자동으로 붙음
}
}
