1. 상속의 정의
1) 기존의 클래스를 확장하여 새로운 클래스를 작성하는 것.
두 클래스를 부모와 자식 관계로 맺어주는 것으로서
자식은 부모의 모든 멤버를 상속받는다.
(단, 생성자, private은 상속이 안 됨. protected는 가능)
C와는 달리 자바는 1개의 클래스만 상속받을 수 있다. 다중상속은 안 됨
2) 형식
class자식클래스명 extends부모클래스명 {
...
}
3) 공통적인 부분을 조상으로 해서 상속받음
사람
--> 경찰
--> 학생
--> 소방관
4) is a 관계
상속 관계가 있는 클래스들은 자식 클래스 is a 부모 클래스의 관계로 정의될 수 있다.
예) Student is a Person(O)
Person is a Student(X)
4) has a 관계(포함관계)
한 클래스의 멤버 변수로 다른 클래스를 선언해서 부품처럼 조립하여 사용하는 것.
상속과는 다르다.
예1) Car has a Engine.
Car has a Radio.
예2)
Member has a product
class Member{
String name;
String userid;
Product favorateProduct; // product 타입의 클래스가 Member 클래스의 멤버 변수로 포함되었음. 이것이 포함관계임.
}
class Product{
String productName;
int price;
String maker;
}
2. 기타
1) 자바의 모든 클래스는 기본적으로 Object 클래스를 상속받고 있다.
2) 상속받은 자식 클래스에서 부모 클래스의 private 멤버 변수에 접근하기 위해서는 부모 클래스에서 getter, setter 메소드를 public으로 만들면 이것은 상속된다. 자식 클래스에서는 이것을 써야 한다.
혹은
부모 클래스의 private을 protected로 바꿔도 된다.
3) super : 부모 클래스의 멤버나 메소드를 가리킴
this.name : 현재 클래스의 name 변수
super.name : 부모 클래스의 name 변수
4) super() -> 부모 클래스의 생성자 호출, 매개변수 가능함.
5) 상속받은 클래스의 타입으로 new 연산자를 이용해 객체 생성 시 만들어지는 순서
부모 클래스 생성 -> 부모 클래스 생성자 호출 -> 자식 클래스 생성 -> 자식 클래스 생성자 호출
따라서 부모 클래스에 기본생성자 없이 매개변수만 있는 생성자만 있다면 에러를 일으킨다.
부모 클래스에 기본생성자를 만들던지
아니면
자식 클래스에 super(매개변수); 라는 생성자 호출 코딩을 넣어야 한다.
따라서 기본생성자에 코딩할 내용이 없어도 습관적으로 만들어놓는 것이 좋다.
6) 부모 클래스 작업이 끝나야 자식 클래스의 작업을 할 수 있다. 순서가 바뀌면 에러 일으킴.
super(weight, length); //부모 생성자 호출
this.height = height; //자식 클래스의 작업
두 줄의 코딩 위치를 바꾸면 에러가 남.
Tip
1) 매개변수 있는 생성자 쉽게 만드는 법
우클릭 > source > 밑에서 세 번째
'공부방 > 자바프로그래밍' 카테고리의 다른 글
자바 추상화 (0) | 2020.08.23 |
---|---|
자바 다형성 (0) | 2020.08.12 |
자바 final (0) | 2020.08.07 |
자바 static 변수(정적변수) (0) | 2020.07.30 |
자바 생성자 (0) | 2020.07.20 |
자바 클래스와 객체 (0) | 2020.07.15 |
자바 Method(메소드) (0) | 2020.07.13 |
자바 배열 (0) | 2020.07.05 |
댓글