상속은 IS-A 관계(하위클래스는 완벽한 상위클래스)
상위 클래스의 모든 내용을 하위 클래스가 계승한다.
상위 클래스의 모든 내용을 하위 클래스가 계승한다.
모듈의 재사용(reuse)과 코드의 간결성을 지원함.
클래스를 이용하여 다른 클래스를 생성 또는 정의할 수 있음
하위 클래스는 상속된 필드와 메소드 중에 private으로 선언된 것이 아닌 것에만 접근할 수 있다.
(private으로 선언된것도 상속되지만 단지 접근 못할 뿐)
원시 코드 및 외부 인터페이스 재사용
하위 클래스는 상위클래스를 처다볼 수 잇지만 상위클래스는 하위클래스가 여러 개가 될 수 있으므로 정할 수 없다.
상위 클래스는 오직 한 개만 존재(자바는 단일 상속, C++의 경우 여러 개의 상위 클래스가 존재할 수 있다)
상위클래스 자체 및 변수, 메쏘드의 재사용
클래스를 이용하여 다른 클래스를 생성 또는 정의할 수 있음
하위 클래스는 상속된 필드와 메소드 중에 private으로 선언된 것이 아닌 것에만 접근할 수 있다.
(private으로 선언된것도 상속되지만 단지 접근 못할 뿐)
원시 코드 및 외부 인터페이스 재사용
하위 클래스는 상위클래스를 처다볼 수 잇지만 상위클래스는 하위클래스가 여러 개가 될 수 있으므로 정할 수 없다.
상위 클래스는 오직 한 개만 존재(자바는 단일 상속, C++의 경우 여러 개의 상위 클래스가 존재할 수 있다)
상위클래스 자체 및 변수, 메쏘드의 재사용
[예제]
package onj;
class A
{
int f; // 인스턴스 변수
void m() { System.out.println("m()"); } // 인스턴스 메쏘드
static int sf; // 클래스 변수
static void sm() {
System.out.println("A sm()");
} // 클래스 메쏘드
}
{
int f; // 인스턴스 변수
void m() { System.out.println("m()"); } // 인스턴스 메쏘드
static int sf; // 클래스 변수
static void sm() {
System.out.println("A sm()");
} // 클래스 메쏘드
}
class InheritanceTest extends A
{
int f2;
void m2() {
System.out.println("B sm()");
}
public static void main(String[] args)
{
InheritanceTest b = new InheritanceTest();
b.f2++; // InheritanceTest의 필드
b.m2(); // InheritanceTest의 메쏘드
b.f++; // A로부터 상속된InheritanceTest의 필드
b.m(); // A로부터 상속된 InheritanceTest의 인스턴스 메쏘드
InheritanceTest.sf++; // A로부터 상속된 클래스 필드
InheritanceTest.sm(); // A로부터 상속된 클래스 메쏘드
}
}
{
int f2;
void m2() {
System.out.println("B sm()");
}
public static void main(String[] args)
{
InheritanceTest b = new InheritanceTest();
b.f2++; // InheritanceTest의 필드
b.m2(); // InheritanceTest의 메쏘드
b.f++; // A로부터 상속된InheritanceTest의 필드
b.m(); // A로부터 상속된 InheritanceTest의 인스턴스 메쏘드
InheritanceTest.sf++; // A로부터 상속된 클래스 필드
InheritanceTest.sm(); // A로부터 상속된 클래스 메쏘드
}
}
[결과]
댓글 없음:
댓글 쓰기