- 자바 상속의 특징
- super 키워드
- 메소드 오버라이딩
- 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
- 추상 클래스
- final 키워드
- Object 클래스
-
자바의 모든 클래스는
Object를 상속하고 있다. -
자바는
단일 상속만을 지원한다. -
자바에서는 상속의 횟수에 제한을 두지 않는다.
//상속의 횟수를 제한하지 않는다. = 상속받는 횟수에 제한을 두지 않는다. class A{} class B extends A {} class C extends B {}
- this:인스턴스 자신의 주소를 나타내는 참조변수
- super: 현재 인스턴스의 부모 클래스(슈퍼 클래스)의 주소를 나타내는 참조변수
- super(): 부모 클래스(슈퍼 클래스)의 생성자를 의미하는 키워드
public class Parent {
int value = 10;
}class Child extends Parent{
int value = 20;
public void print() {
System.out.println(value);
System.out.println(this.value);
System.out.println(super.value);
}
}20
20
10
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}ElementType.METHOD: 어노테이션 적용할 대상이METHOD라는 것을 의미한다.RetentionPolicy.SOURCE: 컴파일 단계에서판단하겠다는 내용.
함수명이 동일해야 하고,매개변수가 같아야 하고,리턴 타입이 같아야 한다.
class Parent {
public String print() {
return "parentPrint";
}
}class Child {
@Override
public String print() {
return "childPrint"
}
}abstract class 클래스이름 {
}- 자체적으로 인스턴스 생성 불가능
생성자와멤버변수,일반 메서드를 모두 가질 수 있다.
abstract class AbstracSample {
private int value = 5;
abstract String getAbstracMethod();
}- 추상 클래스를 구현할 때는 최대한 공통되는 부분을 잘 구분짓도록 한다.
- 자바 진영에서는 추상 클래스를 단일 상속을 지원하고 있고, 상속할 경우, 무조건 추상 메서드를 구현해야 하기 때문이다.
- final의 의미
마지막변경될 수 없는
| 대상 | 의미 |
|---|---|
| 클래스 | 해당 클래스의 상속을 막는다. (어떤 클래스가 final 선언한 클래스를 상속할 수 없다.) |
| 메서드 | 오버라이딩을 막는다.(하위 클래스에서 메서드 재정의 불가) |
| 멤벼변수, 지역변수 | 값 변경 불가능하다. |
- 자바의 모든 클래스는 Object 클래스를 상속받고 있다.
- 모든 클래스의 최상위 클래스를 의미한다.
-
다이나믹 :
런타임의 의미 -
디스패치 :
어떤 메서드를 호출할지결정한다는 의미 -
= 자바 프로그램이 런타임 시, 오버라이딩된 메서드 중 선택 가능하도록 해주는 기법.
class Parent { void print() { System.out.println("I'm your father"); } } class Child extends Parent { @Override void print() { System.out.println("I'm your child"); } } class Main { public static void main(String[] args) { Parent parent = new Parent(); Child child = new Child(); Parent ref; ref = parent; ref.print(); ref = child; ref.print(); } }
I'm your father I'm your child