추상 클래스 : 몸체 없는 메소드를 포함한 클래스(미완성 설계도), 상속 + 다형성 [접근제한자] abstract class 클래스명{ }
추상 메소드 : 몸체 없는 메소드, 상속시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드 [접근제한자] abstract 반환형 메소드명(자료형 변수명);
특징
① 미완성 클래스(abstact 키워드 사용)
: 자체적으로 객체 생성 불가 -> 반드시 상속하여 객체 생성
② abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
: abstract 메소드가 없어도 abstract 클래스 선언 가능 (abstract 메소드가 0개 이상)
③ 클래스 내에 일반 변수, 메소드 포함 가능
④ 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능
장점
상속 받은 자식에게 공통된 멤버를 제공하고, 일부 기능의 구현을 강제화 (자식클래스에서 재정의)
정의 : 상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체, 상속 시 인터페이스 내에 정의된 모든 추상메소드를 구현해야 함
[접근제한자] interface 인터페이스명{ [public static final] 자료형 변수명 = 초기값; // 변수명은 대문자로.. [public abstract] 반환자료형 메소드명([자료형 매개변수]); // public abstract가 생략 가능하기 때문에 // 오버라이딩 시 반드시 public 표기해야 함
사용 : 어떤 객체가 이미 상속을 받고 있는데 다른 타입을 참고해야 할 경우 인터페이스를 사용한다.
포유류 : 고양이, 개, 고래
조류 : 닭, 독수리, 펭귄
어류 : 상어고래, 펭귄, 상어 => 물속생활 클래스로 상속 가능??
=> No, 이미 포유류, 조류, 어류의 자손이고, 단일 상속만 가능하기 때문에
이때 사용하는게 인터페이스
특징
① 모든 인터페이스의 메소드는 묵시적으로 public abstract
② 변수는 묵시적으로 public static final
③ 객체 생성은 안되나 참조형 변수로는 가능 (다형성)
④ 다중 상속 가능하기 때문에 여러개의 인터페이스 추가 가능
ex) public class Whale extends TypeMammalia implements WaterLife, BigAnimal, GoodAnimal{ }
장점
① 다형성을 이용하여 상위 타입 역할 (자식 객체 연결)
② 인터페이스 구현 객체에 공통된 기능 구현 강제화 (== 구현 객체간의 일관성 제공)
③ 공동 작업을 위한 인터페이스 제공
추상 클래스 vs 인터페이스
① [일반클래스] 상속
② [추상클래스] 상속
③ [인터페이스] 상속 : 접점
연관성이 낮거나 없는 클래스에게 공통된 기능을 제공할 때 사용
ex) 키보드, 마우스, 스캐너, 카메라, 기울기 센서 (공통점 : 입력장치)
우연히도 입력이라는 기능을 가지고 있음 -> 각각의 용도는 다르지만 입력이라는 공통된 기능명이 있음, 입력이라는 접점
+모든 필드가 묵시적(암묵적) public static final
ex) public static final double PI = 3.141592; -> duoble PI = 3.141592;
+모든 메서드가 묵시적으로 public abstract(추상메서드) => 같은 이름을 제공할뿐이지, 상세한 기능제공은 하지 않는다.
ex) (public abstract) void input() // input이라는 이름을 자식에게 제공할 뿐, 상세한 기능은 자식이 알아서 오버라이딩 해라. 추상메서드 이니깐 오버라이딩의 강제화