CODEDRAGON ㆍDevelopment/Java
추상 클래스의 상속 관계
- 추상 클래스들간에도 상속이 가능합니다.
- 일반 클래스들간의 상속과 유사하지만 추상 클래스들간의 상속에서는 상속 받은 추상 메서드들을 꼭 재정의할 필요는 없습니다.
- 왜냐하면 그냥 상속만 받아두고 있다가 언제가 일반 클래스와 상속관계가 이루어 질 때, 이때 재정의 하지 못했던 상속 받은 추상 메서드들을 모두 일반 클래스 내에서 재정의하면 되기 때문입니다.
추상 클래스 관련 동일한 용어 정리
Concreate class | extends | Abstract class |
일반클래스 구현클래스 서브클래스 구상클래스 구체클래스 | extends | 추상클래스 |
모든 메소드를 구현한 클래스 | extends | 선언만 존재하고 구현되지 않은 메서드를 가진 클래스 |
AbsEx1을 상속 받는 추상 클래스를 작성
abstract class AbsEx1{ int a = 2020; //변수 final String str = "abstract test"; //상수 public String getStr(){ //일반 메서드 return str; } // 추상 메서드는 몸체(body)가 없다. abstract public int getA();
|
abstract class AbsEx2 extends AbsEx1{ // 부모클래스의 추상 메서드 재 정의 @Override public int getA(){ return a; } public abstract String getStr(); } |
AbsEx1을 상속 받는 하위 클래스 작성
abstract class AbsEx1 { int a = 2020; // 변수 final String str = "abstract test"; // 상수
public String getStr() { // 일반 메서드 return str; }
// 추상 메서드는 몸체(body)가 없다. abstract public int getA(); }
|
abstract class AbsEx2 extends AbsEx1{
public void getStrTwo(){ } }
|
|
public class AbstractEx02 extends AbsEx2 { // AbsEx2의 추상 메서드 재 정의 @Override public String getStr() { return str; // str은 AbsEx1의 멤버 }
public static void main(String[] args) { AbstractEx02 ae = new AbstractEx02(); System.out.println("ae.getA():" + ae.getA()); System.out.println("ae.getStr():" + ae.getStr()); } }
|
'Development > Java' 카테고리의 다른 글
NestClass 를 만드는 이유 (0) | 2017.09.27 |
---|---|
중첩클래스(Nested Class) - 중첩 클래스의 구성 형식, Nested Class 분류 도식도 (0) | 2017.09.27 |
인터페이스의 상수 (0) | 2017.09.26 |
인터페이스(interface), 인터페이스 선언, 인터페이스의 기본 구성과 구현, 인터페이스의 특징 (0) | 2017.09.26 |
final 예약어 - final 적용(변수, 메소드, 클래스), final로 상수화된 값을 변경할 경우 컴파일 에러 발생 (0) | 2017.09.26 |