참고
- p.162~
- 추상클래스: AbsTest.java
추상클래스
추상메서드
- 미완성된 메서드
- 선언부 only
- 조상클래스: 선언부만 작성 / 자손클래스: 구현부 작성
추상클래스
- 미완성된 클래스
- 미완성된 메서드(추상메서드)를 포함하고 있다.
- 인스턴스 생성 불가
- 아예 못 만드는건 아닌데 객체를 생성하려면 구현안된 메서드까지 만들어야함
- abstract으로 만들려면 구현안된 메서드를 동시에 다 구현을 해야만 객체가 완성이 됨.
- 그럼 메인에 생성자안에 내부클래스가 생성되서 구현부분이 생김
- abstract class : 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해 주세욜
- 클래스이긴 하기때문에 생성자, 멤버변수, 메서드 를 가질 수 있다.
- 어떤 기능을 수행할 목적으로 만든것인지?
public class AbsTest{
public static void main(String[] args){
}
}
abstract class Unit{
int x;
int y;
abstract void move(int x, int y);
void stop(){
}
}
class Marine extends Unit{
void stimPack(){
}
@Override
void move(int x, int y){
}
}
class Tank extends Unit{
void changeMode(){
}
@Override
void move(int x, int y){
}
}
인터페이스 (Interface)
- 일종의 추상클래스이지만 멤버변수로 상수와 추상메서드만 가진다.
interface 인터페이스명{
(public static final) 변수타입 변수명 = 값;
(public abstract) 반환타입 메서드명(매개변수);
}
- 모든 변수는 public static final 이어야한다. -> 생략가능
- 모든 메서드는 public abstract 이어야한다. -> 생략가능
- 접근제어자로 public, default만 가능
인터페이스의 상속
- 인터페이스는 클래스를 상속할 수 없고, 인터페이스만 상속가능
- 클래스는 일반변수도 가지고 있기때문에 상속받게되면 추상메서드, 상수 외에 다른 것도 가지게 되기 때문에
- 다중상속가능
- 선언부밖에 없기때문에
- 구현부는 나중에 만들면 되니까
인터페이스의 구현
- p.167, InterTest.java
- 자체로는 객체를 생성할 수 없다.
- 모든 메서드: 추상메서드 -> 생성자 또한 메서드 -> 생성자 구현부가 없어 객체생성불가
- 자신이 정의된 추상메서드의 몸통을 만들어주는 클래스가 존재해야 한다.
- 상속 => extends, 구현 => implements
- 인터페이스의 일부분만 구현하였다면 해당 클래스는 추상클래스가 된다.
- 인터페이스 타입의 참조변수로 이 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다
public class InterTest{
public static void main(String[] args){
}
}
class Unit{
int x;
int y;
int currentHP;
}
class Fight extends Unit implements Fightable{
@Override
public void move(int x, int y){
}
@Override
public void attack(Unit u){
}
}
interface Fightable extends Movable, Attackable{
}
interface Movable{
void move(int x, int y);
}
interface Attackable{
void attack(Unit u);
}
명칭
- 과거: ~able(~을 할 수 있는)
- 현재: IMember 인터페이스 => IMemberImpl 구현체 (인터페이스를 구현한 클래스)
인터페이스의 장점
- p.170
- 개발시간 단축
- 표준화 가능
- 서로 관계가 없는 클래스들에게 관계를 설정해줄 수 있다.
- 독립적인 프로그래밍
인터페이스의 이해
- 클래스를 사용하는 쪽 (user), 제공하는 쪽(provider)
- 메서드를 사용하는 쪽에서는 선언부만 알면 된다.
- A-B (직접관계) --변경--> (간접관계) A - I - B