[상속 기본개념]
(1) 상속이란? 객체 관계를 중심으로 설명
- 객체 간의 관계를 설정하는 것 : 여러 관계가 있지만 서로 속하는 관계로 설정함
- 서로 속한다 : 상위와 하위(파생, 포함)관계로 설정하는 것을 말함
- 예 : 타이어 > 한국타이어, 금호타이어
(2) 상속을 구체화한 자바 문법 : extends(class), implements(interface), Override
(3) 상속 범위
- private를 제외한 접근제어자
(4) extends를 사용해보자
public class Account {
/* private field */
private String account_num;
private int money;
/* public field */
public Account() {
this.account_num = "123412313123";
this.money = 0;
}
public String getAccount_num() {
return account_num;
}
public int getMoney() {
return money;
}
protected void setMoney(int money) {
this.money = money;
}
}
public class KBAccount extends Account {
/************* main *************/
public static void main(String[] args) {
KBAccount c1 = new KBAccount("박진형");
c1.setMoney(100);
System.out.println(c1.getAccount_num());
}
/************* KBAccount code *************/
private String name;
public KBAccount(String name) {
super();
this.name = name;
}
@Override
public int getMoney() {
/* 확인과 관련한 로직 수행 -> 상위 객체에 요청 -> 돈 가져왕 */
return super.getMoney();
}
@Override
protected void setMoney(int money) {
/* 확인과 관련한 로직 수행 -> 상위 객체에 요청 -> 수정 */
super.setMoney(money);
}
}
(5) super와 this의 차이
- super : 자신의 상위 객체(타입 - 클래스)를 지칭
1) super() - 생성자, 매개변수가 있을 땐 super(매개변수)
2) super.필드/메서드
- this : 자신을 지칭
(6) 설계의 중요성
- 설계가 정말로 중요함
- 객체 간의 관계를 설정해두고 코딩을 합시다
- 무작정 Cat, Dog, Lion... 만들기 시작하면 중복 코드 어쩔......
(7) final 키워드의 의미와 final가 적용된 클래스와 메서드
- final : 마지막!
- final 클래스 : 아무런 관계도 맺지않는 객체 타입을 뜻함, 즉 상속하지않음
- final 메서드 : 오버라이딩 허용하지않겠다는 것
- final 클래스 예시 : 자바 표준 API - String, Integer 등 extends 할 수 없음
(8) 다시 살펴보자 접근제어자
- public < protected < default < private
- 적용대상과 범위
1) public : 클래스에도 지정 가능하며, 모든 곳에서 접근가능함
2) protected : 클래스를 제외하고 지정 가능하며, 같은 패키지는 모두, 다른 패키지에서는 상속받는 객체타입만 접근 가능
3) default : 같은 패키지 내에서만 접근 가능
4) private : this, 자기 자신이외에 접근 불가
'java' 카테고리의 다른 글
[Java] JDBC와 RDBMS 개념 이야기 (0) | 2017.09.25 |
---|---|
[Java] 객체지향과 상속#2 - 자바 다형성 구현과 상속 (0) | 2017.09.24 |
[Java] 어노테이션 - xml을 벗어나자 (0) | 2017.09.21 |
[Java] 클래스 - 객체지향, static, instance, 접근제어자, 싱글턴 등 (0) | 2017.09.19 |
[Java] 개념은 제대로 알고가자 - 객체지향 무엇인가 (0) | 2017.09.16 |
댓글