추상 클래스
ㅡ 클래스를 설계도라고 하면 추상 클래스는 미완성 설계도
ㅡ 추상 클래스는 인스턴스 생성 X, 상속을 통해 하위 클래스에서만 완성
ㅡ 추상 메서드를 포함하는 것 말곤 일반 클래스와 유사함
abstract class 클래스 명 { } ← 이렇게 생성
추상화 : 클래스 간의 공통점을 찾아내서 공통 상위 클래스 만드는 작업
구체화 : 상속을 통해 클래스 구현 [ 확장 ]
*추상 클래스를 상속한 클래스는 추상 클래스의 메서드를 작성해줘야 한다.
추상 메서드
ㅡ 선언부만 작성, 구현부는 작성하지 않는다.
ㅡ 하위 클래스에서 구현부를 작성한다
abstract class Animal {
String arms;
String legs;
abstract void eat(); // {} 코드 블럭은 적지 않는다.
}
class Chicken extends Animal {
String tails;
void eat(){
System.out.println("밥 먹기");
}
}
public class Abstract {
public static void main(String[] args) {
// Animal animal = new Animal(); 추상 클래스는 인스턴스 생성이 안됨 / 정해진 값이 없기에
Chicken ch = new Chicken();
ch.eat();
}
}
인터페이스
ㅡ 추상 클래스의 일종
ㅡ 추상 클래스보다 추상화의 정도가 높기에 일반 메서드, 일반 멤버 변수를 선언할 수 없음
ㅡ class 대신 interface를 붙인다.
class 클래스명 → interface 인터페이스명
* 인터페이스에 작성된 추상 메서드는 구현한 클래스에서 작성해줘야 한다.
*제약
1. 모든 멤버 변수는 public static final이어야 하며, 생략 X
2. 모든 메서드는 public abstract이어야 하며, 생략 O ( jdk 8버전부터 생략 가능하며 static, default 메서드도 가능하다는 것 같다 )
abstract과 static를 같이 사용하면 abstract, static, default 중 하나만 사용하라는 문구가 뜬다.
인터페이스는 기존의 상속관 다르게 다중 상속이 가능하다 / 인터페이스 상속은 인터페이스만 가능
interface Captain {
void Attack();
}
interface Pirate{
void Clean();
}
interface Pirate2 extends Pirate, Captain {}
인터페이스 구현
인터페이스도 그 자체로 인스턴스를 생성할 순 없다.
인터페이스를 구현한 클래스에서 인스턴스 생성이 가능하다.
class 클래스명 implements 인터페이스명 {
인터페이스명 참조변수 = new 클래스명();
}
이런 느낌?
public interface IExample01 {
// 인터페이스에는 static final로 선언된 상수만 선언 가능
public static final int NUMBER = 0;
// 인터페이스에는 추상메서드만 선언 가능, public abstract 생략한 상태?
void hello();
}
class Example implements IExample01{
IExample01 ex = new Example();
// 인터페이스에 작성된 추상 메서드는 반드시 = 추상 클래스도 마찬가지
// 모두 구현 해야함
public void hello() {
System.out.println("하이");
}
}
'Java' 카테고리의 다른 글
컬렉션 프레임워크 ( Collection Framework ) / 제네릭 ( Generic ) (0) | 2023.01.12 |
---|---|
예외 처리 ( Exception Handling ) (0) | 2023.01.11 |
다형성 ( Polymorphism ) (0) | 2023.01.10 |
HashMap (0) | 2023.01.10 |
상속 ( Inheritance ) / 오버라이딩 ( Overriding ) (0) | 2023.01.09 |
댓글