본문 바로가기

JAVA

[JAVA] 추상클래스와 인터페이스


추상메서드


// 추상클래스 (불안전한 객체)
public abstract class Animal{

    // 추상메서드 (불안전한 메서드)
   public abstract void eat(){}
    
    // 일반 메서드
    public void movie(){}

}

 

추상 메서드는 객체를 만들 수 없습니다.

Animal ani = new Animal(); // 만들 수 없다

 

자신의 혼자서는 사용을 하지 못하며, 부모의 역할로만 사용할 수 있습니다.

public class Dog extends Animal{

	
    public void eat(){}

}

public class Cat extends Animal{
	
    public void eat(){}
    
}

추상 클래스인 부모에 추상 메서드가 있다면, 구현 클래스에는 반드시 추상 메서드를 구현해야 합니다. (재정의)

재정의를 하지 않으면 하위 클래스도 추상클래스가 되기 때문에 객체를 생성할 수 없게 됩니다.

 

객체를 생성할 경우에 부모 클래스를 타입으로 하면, 메서드를 호출할 때 메서드 오버 라이딩되면서 자식 클래스의 메서드가 호출이 됩니다.

Animal r = new Dog();
r.eat();

 

추상클래스는 추상메서드를 구현하고, 구현 메서드도 따로 구현할 수 있습니다. (일부 다형성 보장)

하지만 인터페이스는 100% 추상메서드를 구현해야 합니다. (다형성 완전 보장)

 

인터페이스


인터페이스는 다형성을 100% 보장합니다.

public interface RemoCon{
	
    public abstract void chUp();
    public void chDown();
    public abstract void internat();
    
    // 구현된 메서드를 가질 수 없다.
    public void internet(){...};
    
}

추상메서드와는 달리 인터페이스는 구현된 메서드를 가질 수 없으며,자식 클래스에서 반드시 구현해주어야 합니다.

 

인터페이스를 사용하게 되면 메서드는 모두 추상메서드가 되며, abstract를 생략할 수 있습니다.

    public abstract void chUp();
    public abstract void chDown();
    public abstract void internat();
    
   		 | |
                 | |
                \   /
                 \ /
                 
    public void chUp();
    public void chDown();
    public void internet();

 

상속은 implements를 사용하여 상속을 받고 인터페이스를 상속받은 클래스는 반드시 인터페이스안에 있는 모든 추상 메서드를 구현해야 합니다.

public class TV implements RemoCon{
	
    public void chUp(){...};
    
    public void chDown(){...};
    
    public void internet(){...};
}

 

또한, 인터페이스에서는 상수가 사용가능합니다.

public interface RemoCon{
	
    public static final int MAX = 100;   // RemoCon.MAX
    public static final int MIN = 1; 	 // RemoCon.MIN
    
       		 | |
                 | |
                \   /
                 \ /
                 
    int MAX = 100;
    int MIN =1 ;
    
    public abstract void chUp();
    public void chDown();
    public abstract void internat();

    
}

int MAX = 100; 이런식으로 사용이 가능하지만 public static final int MAX = 100; 이라는 뜻이며 static final은 생략 가능합니다.

RemoCon.MAX = 100; 이런식으로 사용 가능합니다.