면접에서 추상 클래스와 인터페이스의 차이를 물어보셨다.

핑계지만 C++로 개발하던 중이었던 나는 어렴풋이 알고 있어서 대답을 못했다.

소잃고 외양간을 고치듯이 지금이라도 대답을 해보려 한다.

 

  • 인터페이스는 다중 상속이 가능하나 추상클래스는 다중 상속이 안된다!
  • 인터페이스는 멤버 변수를 선언할 시에 public static final 즉 상수만 된다!
  • 추상 클래스는 일반 메서드와 멤버 변수를 선언할 수 있다!

 

더 많은 특징들이 있지만 대답이 바로 나올 수 있는 것들만 정리했다.

 

각자 기능들의 특징을 정리하고자 한다!

 

내가 좋아하는 재벌집 막내아들로 구현을 해보았다.


추상 클래스

public abstract class 순양 {

	// abstract는 멤버 변수 선언이 가능하다.
	private String name = "진양철";

	// abstract는 메서드 선언이 가능하다.
	public void 진양철() {	
		System.out.println("순양은 내꺼다!");
	}

	public abstract void 지주사주총();

	//지주사 주총 메서드 작성을 해야 하는데 abstract로 구현하면 떠넘기기가 가능하다.
	public abstract class 물산 extends 순양 {

		public abstract void 물산주총();
	}
	
	// 일반 클래스로 구현하면 상속받은 추상 클래스에 추상메소드를 구현을 해야 한다.
	public class 증권 extends 순양 {

		@Override
		public void 지주사주총() {

		}
	}

	//물산 클래스를 상속받았지만 작성을 하지 않은 순양 클래스 메서드도 같이 구현해야 한다.
	public class 전자 extends 물산 {

		@Override
		public void 물산주총() {

		}

		@Override
		public void 지주사주총() {

		}
	}
}

인터페이스

public interface 순양 {
    //필드 변수는 상수만 된다!
    public static final String name = "진양철";

    public interface 물산 {
        public static final String name = "진영기";

        void 물산주총();
    }

    public interface 증권 {
        public static final String name = "진동기";

        void 증권주총();
    }

    //인터페이스는 다중 상속이 가능하다!
    //인터페이스끼리 상속할 때는 extends!
    public interface 전자 extends 순양, 증권 {
        void 전자주총();
    }

    //인터페이스를 가져올 때는 implements
    //상속받은 구현부는 다 재정의를 해줘야 한다.
    class 미라클 implements 전자 {

        @Override
        public void 증권주총() {

        }

        @Override
        public void 전자주총() {

        }
    }

}

+ Recent posts