일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- static 메서드
- 호출스택
- 명예의전당(1)
- object클래스
- this()
- 기본형 매개변수
- 운영체제의 예
- 클래스 변수
- 참조형 반환타입
- 객체 배열
- 인스턴스 메서드
- 운영체제의 구조
- 이것이코딩테스트다
- 조상의 생성자
- webview_flutter
- static import문
- stateful widget 생명주기
- 운영체제란 무엇인가
- stateful widget
- FLUTTER
- 오버라이딩과 오버로딩 차이점
- 운영체제의 목적
- 프로그래머스
- 참조형 매개변수
- 오버로딩
- 초기화 순서
- PriorityQueue
- this()와 참조변수 this 차이점
- 운영체제의 분류
- stateless widget
- Today
- Total
Coram Deo
ch 7-1~9 [객체지향 개념] - 상속, 포함 관계, 오버라이딩과 오버로딩 차이점 본문
ch 7-1,2 상속(Inheritance)
- 기존의 클래스로 새로운 클래스를 작성하는 것. (코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
- 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외)
- 자손의 멤버 개수는 조상보다 적을 수 없다. (같거나 많다.)
- 자손의 변경은 조상에 영향을 미치지 않는다. * 단, 부모의 변경은 자식에 영향을 줌.
- 상속하면 자손 클래스가 확장된다. → extends
ch 7- 3 포함 관계
▶ 포함(Composite)이란?
- 클래스의 멤버로 참조변수를 선언하는 것
- 작은 단위의 클래스를 만들고, 이들을 조합해서 클래스를 만든다.
// 포함관계 예제
class Point {
int x;
int y;
}
class Circle {
Point c = new Point(); // 원점
int r; // 반지름(radius)
}
ch 7- 4 클래스 간의 관계 결정하기
상속관계 '~은 ~이다.(is-a)'
포함관계 '~은 ~을 가지고 있다.(has-a)'
class Point {
int x;
int y;
}
// 1. 포함관계
class Circle {
Point c = new Point();
int r;
}
// 2. 상속관계
class Circle extends Point {
int r;
}
Circle c = new Circle();
// 1,2번일 때 각각 그림 직접 그려보기
예시) 원(Circle)은 점(Point)이다. - Circle is a Point. → 상속
원(Circle)은 점(Point)을 가지고 있다. - Circle has a Point. → 포함
* 대부분의 경우(90%)는 포함이다. 상속은 여러가지 제약이 많기 때문에 꼭 필요할때만 씀.
프로그래밍 = 설계(90%) + 코딩(10%)
설계 (=그리기) → 많이 그려보기!
ch 7- 5 단일 상속(Single Inheritance)
- Java는 단일상속만을 허용한다.(C++은 다중상속 허용)
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
ch 7- 6 Object 클래스 - 모든 클래스의 조상
- 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다. (우리가 작성하지 않아도 컴파일러가 자동 추가해줌.)
- 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
- 11개의 메서드 : toString(), equals(Object obj), hashCode(), ...
- toString()
클래스이름@객체주소값
* 아래 두 문장의 출력결과가 같음. (println안에 참조변수를 입력하면 toString()자동 호출함.)
println(참조변수) = println(c.toString())
ch 7- 7 메서드 오버라이딩(overriding)
- override : v. 덮어쓰다.
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
- 선언부는 변경불가, 내용(구현부)만 변경가능
- 의미상 같은 일을 할 때 사용
ch 7- 8 오버라이딩의 조건
1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. * 접근제어자 : public, protected, private 등
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다. (예외는 8장에서 / 같거나 적어야함.)
ch 7- 9 오버로딩 vs 오버라이딩
* 일단 둘은 관계가 없음.
- 오버로딩 : 이름이 같은 새로운 메서드를 정의하는 것(new)
- 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것(change, modify)
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
void childMethod() {} // 메서드 정의
void childMethod(int i) {} // 오버로딩
void childMethod() {} // 중복정의 -> 오버로딩도 아니고 오버라이딩도 아님. 에러임.
}
'자바의 정석' 카테고리의 다른 글
ch 7-10~16[객체지향 개념] - super, 패키지, classpath, import문 (0) | 2022.11.06 |
---|---|
ch 6-32~41 [객체지향 개념] - 생성자, this()와 참조변수 this 차이점, 변수 초기화 (0) | 2022.11.03 |
이클립스 git repository 경로 확인 방법 (0) | 2022.11.02 |
ch 6-26~31 [객체지향 개념] - static 메서드, 인스턴스 메서드, 오버로딩 (0) | 2022.11.01 |
코포자를 위한 코딩 공부법 #3 (0) | 2022.10.31 |