2013년 8월 9일 금요일

8월9일상속


 *상속




 - 기존의 코드를 손대지 않고 기능을 확장하는 방법.


 -  =>기존의 코드를 건드리지 않으면 버그가 있을 가능성이 줄어든다.


 - 기존의 소스코드에 손을 댄다는 것은 버그가 발생하는 위험이 발생한다.


 - 기존의 소스코드가 필요없다.









* 상속의 한계


 - 필요없는 기능까지 상속받는다


 - : 즉 class 코드가 무거워진다.






  ==  class InheritTest


class A {
int i;
///*생성자를 따로 안만들면 다음과 같이 기본 생성자가 만들어 진다.
public A() {
super(); // 생략하면 컴파일러가 자동으로 붙인다.
System.out.println("A() 실행:");
i = 100;
}
//*/
public void m() {
System.out.println("A의 m()");
}

public void m2() {
System.out.println("A의 m2()");
}
}
class B extends A{
int j;
///*
public B(int v) {
super();
System.out.println("B() 실행:");
j = v;
}
//*/
public void m() {
System.out.println("B의 m()");
}
}
class C extends B{
int k;
///*
public C() {
super(500);
System.out.println("C() 실행:");
k = 300;
}
// */
public void test() {
this.m(); //B's m() =>C안에 m이 없기 때문에 B로간다.
super.m(); //B's m() => 오버라이딩 하지 않았기 때문에,

this.m2(); // C's m()
super.m2();// 오버라이딩 했기 때문에, A's m2()
}

public void m2() {
System.out.println("C의 m2()");
}
}
public class InheritTest {
public static void main(String[] args) {
C p = new C(); // [i][j][k]
/*
p.i = 10;
p.j = 20;
p.k = 30;
*/

System.out.println(p.i);
System.out.println(p.j);
System.out.println(p.k);

p.test();
}

}

이해할수 있길..




*클래스 로딩
1. Super class로 부터 로딩 된다.
 i)  Static 변수준비
 ii) static 블럭수행

2. 인스턴스 생성
 i) Super로 부터 자기자신까지 쭉 만든다

3. 생성자 호출
위의 예제를 참고!

댓글 없음:

댓글 쓰기