추상 클래스와 추상 메소드
추상 클래스
추상 클래스는 상속받은 하위 클래스에서 구현될 추상적인 기능만을 가지는 추상 메소드를 선언합니다.
추상 클래스는 추상 메소드 외에 일반적인 속성과 메소드를 가질 수 있습니다.
추상 메소드
추상 메소드는 기능이 무엇(What)인지만을 선언하고 구현부분이 없는 메소드입니다.
추상 메소드는 상속받은 하위 클래스에서 오버라이딩되어 구현됩니다.
추상 클래스와 추상 메소드 형식
추상 클래스로 선언하여 사용할때는 abstract 키워드를 사용하여 추상 클래스를 생성하고, 추상 메소드 또한 abstract 키워드를 사용하여 선언해 줍니다.
abstract class 클래스이름 { // 추상 클래스 선언
…….. // 일반 속성과 메소드 기술
abstract void 추상메소드이름( ); // 추상 메소드 선언
……..
}
추상 클래스와 추상 메소드를 사용하는 간단한 프로그램을 작성해 보면 다음과 같습니다.
abstract class Shapes { // Shapes 추상클래스를 선언함
abstract void draw( ); // 구현부분이 없는 draw( ) 추상 메소드를 정의함
}
class Circle extends Shapes { // Shapes 추상클래스를 상속받은 하위클래스 Circle 정의함
void draw( ) { // draw( ) 추상 메소드를 재정의하여 사용(Overriding)함
System.out.println(" 원을 그리는 기능을 구현 ");
}
}
class Triangle extends Shapes { // Shapes 추상클래스를 상속받은 하위클래스 Triangle 정의함
void draw( ) { // draw( ) 추상 메소드를 재정의하여 사용(Overriding)함
System.out.println(" 삼각형을 그리는 기능을 구현 ");
}
}
class Rectangle extends Shapes { // Shapes 추상클래스를 상속받은 하위클래스 Rectangle 정의함
void draw( ) { // draw( ) 추상 메소드를 재정의하여 사용(Overriding)함
System.out.println(" 사각형을 그리는 기능을 구현 ");
}
}
public class AbstractClassTest {
public static void main(String[ ] args) {
Circle c1 = new Circle( );
c1.draw( );
Triangle t1 = new Triangle( );
t1.draw( );
Rectangle r1 = new Rectangle( );
r1.draw( );
System.out.println(" ==== 객체의 형변환과 오버라이딩을 이용==== ");
Shapes a1 = new Circle( ); // 상위 클래스(Shapes)의 객체에 하위 클래스 Circle 의 객체로 형변환 시킴
a1.draw(); // 하위 클래스 Circle 의 draw( ) 메소드 호출
a1 = new Rectangle(); // 하위 클래스 Rectangle 의 객체로 형변환 시킴
a1.draw(); // 하위 클래스 Rectangle 의 draw( ) 메소드 호출
a1 = new Triangle(); // 하위 클래스 Triangle 의 객체로 형변환 시킴
a1.draw(); // 하위 클래스 Triangle 의 draw( ) 메소드 호출
}
}
final 예약어
final 로 선언된 클래스는 하위 클래스를 가지지 못합니다.
final 로 선언된 메소드는 하위 클래스에서 재정의하는 오버라이딩(overriding)이 될 수 없는 메소드입니다.
final 예약어는 상수로 사용될 객체 속성 변수로 사용합니다.
final 예약어는 보안과 설계부분을 명확하게 하기 위해서 사용합니다.
'자바' 카테고리의 다른 글
ArrayList 클래스 (0) | 2021.11.29 |
---|---|
java.lang 패키지 (0) | 2021.11.28 |
자바 배열 (0) | 2021.11.26 |
== 연산자와 equals 메소드 차이점 (0) | 2021.11.24 |
자바 반복문 - while 문과 do while 문 (0) | 2021.11.23 |
댓글