본문 바로가기

Programming/Java

interface 와 추상클래스

인터페이스와 추상클래스에 관해 간단히 설명하고 넘어가겠다.

interface    : 상수와 추상메소드로 구성된다. 
추상클래스 : 속성, 상수, 일반메소드, 추상메소드를 포함할 수 있고, 객체화가                     불가능하다.


interface 구현방법

접근지정자 interface 인터페이스명 {
상수;
추상메소드;
 

ex) 

예를들어 도형이라느 인터페이스는 구현한다고 하면,

public interface 도형{
static final double PI=3.14
double getSize();
            String getName();
 

PI라는 변하지 않는 static final 형태의 상수를 정의하고,
넓이는 구하는  getSize(),getName() 라는 추상메소드를 정의한다.

abstract public double getSize();

라고 정의해도된다.


추상클래스

abstract 접근지정자 class 클래스 extends 부모 implements 인터페이스명{

            속성;
상수;
일반메소드;
추상메소드;

}

추상클래스를 구현할 때에는 반드시 접근지정자를 public 으로 해줘야한다.
왜냐하면 하위클래스에서 Override를 통해 구현해야하기 때문이다.

도형을 implement 하는 추상클래스를 만들어보자.

ex)

abstract public class abstract도형 implements 도형{
        //속성정의
        double baseLine; 
double height;  
        abstract public String PrintState(){

                 System.out.println("넓이 : "+getSize());
                 System.out.println("이름 : "+getName());

        }
 
}

도형을 상속받고, 밑변과 높이라는 속성을 정의하였다.
그리고 상태를 받아오는 PrintState() 메소드를  정의하였다.
PrintState()에서 getSize()와 getName() 을 사용할 수 있는 이유는
implements 해줬기 때문이다.


abstract도형을 상속함으로써 추상클래스내의 속성들을 사용할 수 있고, 인터페이스를 메소드 들을 Override해서 구현하여 메소드를 완성할 수 있다.

삼각형이라는 클래스를 만들었다고 가정하였을 때 
abstract도형을 상속받음으로서 도형의 모든 특징들을 가질 수 있다.
추상메소드로 정의된 메소드들을 삼각형이라는 클래스에서 구체화를 해주게 되면 클래스는 완성이 된다.

ex)

class 삼각형 extends abstract도형{
@Override
            double getSize(){
                      return baseLine*height/2;
            }
            @Override
            String getName(){
                     return "삼각형";
            }


위와 같이 인터페이스의 추상메소드를 오버라이딩하여 구체화 하게되면 사용자가 사용할 수 있는 클래스가 된다. 이를 객체화하여 사용할 수 있게 된다.