<객체지향-상속>
<상속>
1.상속은 다른클래스를 사용하기 위한 방법의 하나이다.->자바에서 실행 클래스가 아닌 다른 클래스를 사용하기 위해서는 지금까지 보아왔듯이,new 명령문으로 다른 클래스의 객체를 만들고,그객체가 제공하는 메소드와 맴버 변수를 사용하는 방법이 있다.
그러나 상속은 다른 클래스를 확장해서 재사용하는 기법이다.
다른 클래스를 상속받으면 상속을 해준 클래스에 있는 메소드와 맴버 변수를 사용할 수 있을 뿐 아니라, 자체적으로 다른 맴버변수나 메소드를 추가해서 확장 사용할 수 있다는 점이 다르다.
부모에게 물려받은 재산을 그대로 유지하는 것이 new라면, 물려받은 재산을 재테크를 통해 불려 나가는 것이 상속인 것이다.
상속을 받기 위해서는 extends라는 키워드를 사용한다.

*간단히 말하자면...
1)상속은 여러개의 클래스에게 할수있다.
2)상속받은 클래스가 또 상속을 할 수도 있다.
3)자식 클래스에 맴버 변수와 메소드가 추가되어도 부모클래스는 영향을 받지 않는다.
4)그러나 부모 클래스가 수정되면 상속받은 자식 클래스들은 자동으로 수정된다.
5)생성자 매소드나 초기화 블록은 상속되지 않는다.
*상속의 문제점
-필요없는 기능까지 상속받는다.
=>class코드가 무거워진다.
***연관관계(Accociation)
두개의 클래스 사이에 존재하는 의미적인 관계를 의미한다.***포함관계(aggregation)
연관은 클래스들의 관계를 표현하기 위한 가장 포괄적인 개념이다.그에반해 포함은 보다 명확하게 관계를 지정해 두고 싶을 때 사용한다.

***실체화 관계(realization)
계약을 명시하는 클래스와 그 계약을 실현하는 클래스 사이의 관계라고 할수있다.
***일반화 관계(generalization)
추상화라고 불리기도 하는데 ,객체 지향적 방법론의 핵심적인 개념중의 하나이다.다수의 특수한 클래스들과 이들을 총괄하는 보편적인 클래스 사이의 관계가 이에 해당한다.

<오버라이딩(overriding)>
1.오버라이딩은 매서드의 내용을 상관없이 선언부의 부모의 것과 완전히 일치해야한다.
2.자식클래스는 부모의 클래스의 매서드와 이름이 같아야한다.
3.매개변수가 부모의 매서드와 일치해야한다.
4.리턴타입이 부모의 매서드와 일치해야한다.
5.접근제어자는 부모클래스의 매서드보다 좁은 범위로 변경할수 없다.
**접근제어자의 범위
(큰 범위) public > protected > default > private (작은 범위)
6.자식클래스는 부모클래스의 매서드에 선언된 예외처리 개수보다 많거나 포함 범위를 크게 선언할수 없다.
**부모:string state()throws IOException, SQLException{}예외처리존재.
자식:string state()throws IOException{}
->이것은 가능하지만 자식:string state()throws Exception{}일경우는 에러가 뜬다.
이유는 에러처리개수는 부모가 2개,자식이 1개이지만 나머지 조건인 포함범위를 크게 선언 할 수 없기때문에 에러가 걸린다.
<예외처리>
*Error
-실행중 일어날 수 있는 치명적 오류로 프로그램적으로 복구가 불가능하다.
오류가 발생하면 프로그램은 비정상적으로 종료된다. 컴파일 시점에 체크할 수도 없다.
*Exception
-Error보다 비교적 경미한 오류로 프로그램의 비상적인 종료나 중단을 막을 수 있다.
예외는 다시 RuntimeException과 RuntimeException이 아닌 Exception 두가지의 형태로 분류할 수 있다.
**throw의 예입니다**
public void bbb() throws Exception{
try {
int i=1/0; // 에러가 발생합니다.
} catch(Exception e) { // 발생한 에러를 잡아서 처리합니다.
System.out.println("B에서 ERROR발생");
throw e; // 에러를 상위 메소드로 던집니다.
}
}
public void main() {
try {
bbb(); // bbb메소드를 호출하고 bbb메소드에서는 에러가 발생해 상위 메소드로 던져집니다.
System.out.println("정상처리되었습니다");
} catch(Exception e) { // 발생한 에러를 잡아서 처리합니다.
System.out.println("처리중 에러발생");
}
}
**try~catch블록으로 예외를 처리할 수 있다**
public void main() {
try {
aaa(); // aaa메소드를 호출하고 aaa메소드에서는 에러가 발생합니다.
} catch(Exception e) { // 발생한 에러를 잡아서 처리합니다.
System.out.println("ERROR");
}
}
참조>*classLoader
1.클래스 로딩
1)슈퍼클래스(부모)로 부터 로딩된다.
2)static(클래스변수라고도 한다) 변수준비 -> static 블럭 수행
--클래스변수 스태틱변수 같은말이다.

댓글 없음:
댓글 쓰기