[JAVA] abstract class와 interface

kjihye0340·2021년 5월 15일
0

java

목록 보기
9/9

Abstract Class(추상 클래스)

  • 상속을 통해 자손 클래스에서 메소드를 완성하도록 유도하는 클래스, 상속을 강제
  • 여러 클래스의 공통점을 찾아 추상화하기 위한 목적
  • 각 메소드와 내용이 추상적이기 때문에 객체를 생성할 수 없음
  • 다중 상속 불가능
    public static abstract class Vehicle{
        public String name;
        public void ride(){
            System.out.println("달리기");
        }
        public abstract int numOfWheel();
    }
    public static class Car extends Vehicle{
        public String name;

        public Car(){
            this.name = name;
        }
        @Override
        public int numOfWheel(){
            System.out.println(4);
            return 4;
        }
    }
    public static void main(String args[]) {
        Car car = new Car();
        car.ride();	//달리기
        car.numOfWheel();	//4
    }

다중 상속이 불가능한 이유

만약 다중 상속이 가능하다고 하면,

    public abstract class Person {
    	public abstract void speak();
        
    }
    public class Father extends Person {
    	@Override
    	public void speak(){
    	    	System.out.println("speak implementation of Father");
    	}
    }
    public class Mother extends Person {
    	@Override
    	public void speak(){
        	System.out.println("speak implementation of Mother");
        }
    }
    public class Child extends Father, Mother {
        public void test(){
        	speak();
        }
    }

Child가 Father와 Mother를 동시에 상속받는 상태에서 speak()메소드를 실행할 때,
speak() 메소드가 Father와 Mother 중 누구에게 상속받은 메소드인지 모호하게 된다.

사용 목적

  1. 공통된 필드와 메소드를 통일
    • 유지보수성을 높이고 통일성을 유지
  2. 실체클래스 구현시 시간 절약
  3. 규격에 맞는 실체 클래스 구현

Interface(인터페이스)

  • 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형
  • 개발자 사이의 코드 규약을 정함
  • 모든 클래스에 대해 특정 메소드가 반드시 존재하도록 강제
  • 여러 구현 객체가 같은 동작을 한다는 것을 보장하기 위함
  • 인터페이스끼리 다중 상속 가능
    public interface VehicleAction{
    	void ride();
        void stop();
    }
    public class Car implements VehicleAction{
    	@Override
        public void ride(){
        	...
        }
        public void stop(){
        	...
        }
    }

default : 인터페이스 내에서 직접 메소드를 구현할 때 사용하는 접근 제어자
- 오버라이딩을 해도 되고 안해도 됨

추상 클래스와 인터페이스 차이점

특징추상 클래스인터페이스
사용 의도여러 클래스의 공통점을 찾아 추상화(is-a)여러 구현 객체가 같은 동작을 한다는 것을 보장(has - a)
다중 상속불가능가능

출처
https://limkydev.tistory.com/188
https://velog.io/@codemcd/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4Interface
https://myjamong.tistory.com/150
https://jeong-pro.tistory.com/82
https://readystory.tistory.com/112

0개의 댓글