사용할 수 있는 멤버의 갯수를 조절하는 것
조상 - 자손 관계일 때 만 참조변수는 서로 형변환 가능
FireEngine f = new FireEngine();// FireEngine객체 생성
Car c = (Car)f; //f를 조상인(Car)타입으로 형변환
FireEngine f2 = (FireEngine)c; //c를 자손인 (FireEngine)으로 형변환
Ambulance a = (Ambulance)f; //상속관계간 아닌 클래스 간의 형변환 불가
-> 형 변환 시 실제 객체가 무엇인지 중요함
실제 객체보다 참조변수의 멤버가 더 많다면 에러가 발생할 수 있어 위험
참조변수의 형변환 가능여부 확인에 사용.
가능하면 True반환
조건문이 참이면 형변환 가능
참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
장점
Product p = new Tv1();
b.buy(p)
b.buy(new Tv1()); //위 코드 한줄요약
매개변수에 조상타입을 쓰고 다형성을 사용하여 메서드를 하나로 단축가능.
Product p1 = new Tv();
Product p2 = new Computer();
Product p3 = new Audio();
↓
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class Player{
abstract void play(int pos);
abstract void stop();
}
Palyer p = new Player(); //에러!! 추상클래스의 인스턴스 생성불가
class AudioPlayer extends Player {
void play(int pos){.. } //추상메서드 구현
void stop(){.. } //추상메서드 구현
}
AudioPlayer ap = new AudioPlayer(); //Ok!
만약 Player.paly를 구현하면 추상클래스가 아닌 추상메서드를 구현한 메서드가 실행됨
추상클래스를 상속받으면, 상속받은 클래스는 추상메서드를 모두 구현해야 한다.
ex)Player
를 상속받은AudioPlayer
는 미완성인player
와stop
메서드의 몸통을 만들어줘야 에러가 발생하지 않는다. 구현하지 않으면 AudioPlayer클래스에도 abstract붙여줘야함
추상 메서드의 집합
구현된 것이 전혀 없는 설계도. 껍데기(모든 멤버가 public)
인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상이 아님)
다중 상속(extends 여러개)이 가능.
class 클래스이름 implements 인터페이스이름{
//인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
}
예시
Fighter클래스는 Fightable인터페이스를 구현했다.
class Fighter implements Fightable {
public void move(int x, int y) {내용생략}
public void attack(Unit u) {내용생략}
}
@@만약 일부만 구현했을 경우, 클래스앞에 abstract를 붙여야 함.@@
예시
abstract class Fighter implements Fightable {
public void move(int x, int y) {내용생략} //1개만 구현
}
class Fighter extends Unit implements Fightable {
public void move(int x, int y) {내용생략}
public void attack(Fightable f) {내용생략}
}
Unit u = new Fighter();
Fightable f = new Fighter();
Fightable
타입의 참조변수f
로 Fighter
클래스를 참조하는게 가능!
인터페이스에 선언된 추상메서드만 Fightable
클래스에서 사용가능.
인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
(Fightable인터페이스를 구현한 클래스의 인스턴스만 가능)
move
와 attack
만 사용가능!
두 객체간의 연결, 대화, 소통을 돕는 중간 역할을 한다.