📌 1. 추상 클래스 및 추상 메소드란?
추상성(Abstractness)란 여러가지 데이터 중 공통된 속성이나 특징만 남기고 차이점을 버리는 것입니다.
추상화된 객체는 결국 실체가 사라집니다.
추상 클래스와 추상 메소드를 정의하면 다음과 같습니다.
* 추상 클래스(Abstract Class) : 미완성 설계도로 추상 메소드를 포함하고 있는 클래스.
abstract 키워드를 사용하여 선언한다. 추상 클래스도 일반 메소드를 가질 수 있다. 추상클래스의 객체는 생성할 수 없다.
추상클래스는 인스턴스 생성이 불가능하다. (포함하는 추상 메소드의 실체가 없으니 추상 클래스 또한 실체가 없다.)
* 추상 메소드(Abstract Method) : 미완성 함수. 선언부만 정의하고 내용은 비워져 있는 메소드. {} 중괄호가 없는 메소드.
추상 메소드는 서브 클래스(자식 클래스) 에서 반드시 오버라이딩한다.
📌 2. 추상 클래스 및 추상 메소드의 필요성?
상속관계에서 서브 클래스가 반드시 구현해야 함을 알릴 때. (강제성 부여)
설계와 구현 분리. (슈퍼클래스에서는 개념적 특징 정의, 서브클래스에서 구체적 행위 구현).
추상 클래스의 특징 : 1. 추상 클래스는 추상 메소드를 하나 이상 포함해야 한다.
2. 추상 클래스에선 변수가 초기화되면 값은 상수값이 되어 값을 바꿀 수 없다.
3. 만약 final을 명시하지 않아도 생략된 걸로 취급한다.
4. 추상 클래스는 인스턴스를 생성할 수 없다. (객체 생성)
5. 다중 상속이 불가능하다.
abstract class Parent { } : 추상 클래스 'Parent'를 정의하고 있습니다.
num : Private 으로 선언된 인스턴스 필드.
var : Private static 으로 선언된 정적 필드.
methodOne() : 추상 메서드로서 하위 클래스에서 구현.
methodThree() : 구현된 일반 메서드로 하위 클래스에서 재정의할 수 없음.
methodFour() : 정적 메서드로 하위 클래스에서 재정의할 필요 없음.
class Child extends Parent { } : Child 클래스는 Parent 클래스를 상속 받습니다. @Overridepublic void methodOne() { System.out.println("[Child] 오버라이딩된 추상 메서드"); } Child 클래스에서는 Parent 클래스의 추상 메서드 methodOne을 오버라이딩하여 구현해야 합니다. @Override 어노테이션을 사용하여 오버라이딩을 명시하고 methodOne()의 구현을 제공합니다.
Child c = new Child();
c.methodOne();
c.methodThree();
c.methodFour();
c.print();
Child 클래스로부터 인스턴스 c를 생성하고 해당 인스턴스를 사용하여 methodOne(), methodThree(), methodFour(), print();를 호출합니다.
Parent p = new Child();
p.methodThree();
p.methodOne();
다형성을 보여주기 위해 Parent 클래스 타입의 참조변수 'p'를 사용하여 new Child()로 생성된 객체를 참조합니다.
참조변수를 선언하는 이유는 다형성을 구현하고 객체 간의 유연한 상호 작용을 가능하게 위함입니다. 상위 클래스 타입의 참조 변수가 하위 클래스의 객체를 참조할 수 있는 것입니다. 참조 변수를 선언함으로써 코드를 더 유연하고 확장 가능하게 만들 수 있습니다.
'JAVA' 카테고리의 다른 글
[JAVA] JVM(자바 가상머신) 과 메모리 구조 (0) | 2024.04.23 |
---|---|
[JAVA] 인터페이스 (Interface) (2) | 2024.04.19 |
[JAVA] Polymorphism (다형성) 이용하여 여러 개의 객체를 구현하기 (0) | 2024.04.17 |
[JAVA] Random 구문을 이용하여 조건식에 맞는 정수값 출력하기 (0) | 2024.04.16 |
[JAVA] 자바 1교시 : 개념, 사용 용도, API, JVM, 런타임 환경 (0) | 2024.04.16 |