추상클래스(abstract class)


추상 - 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업.

구체화 - 상속을 통해 클래스를 구현, 확장하는 작업.


abstract class Player{

boolean pause;

int currentPos;


Player(){

pause = false;

currentPos = 0;

}


abstract void play(int pos)


abstract void stop();


void play(){

play(currentPos);

}


void pause(){

if(pause){

pause = false;

play(currentPos);

} else{

pause = true;

stop();

}

}

}

1.추상클래스란?

추상 메서드(미완성 메서드)를 포함하고 있는 클래스

- 인스턴스를 생성 할 수 없다.

- 추상 클래스의 손자 클래스에서 추상메서드의 구현부를 완성해야 한다.

- 기존 클래스의 공통 부분을 뽑아서 추상클래스를 만든다.


2.추상메서드

- 선언부만 있고 구현부가 없는 메서드.

- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용.

- 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현 해 주어야 한다.

abstract class Player{

absract void play (int pos);

abstract void stop();

}


class AudioPlayer extends Player{

void play(int pos)

void stop();

}


abstract class AbstractPlayer extends Player{

void play(int pos)

}



인터페이스(interface)


1.인터페이스란?

- 실제 구현된 것이 전혀없는 설계도.

- 추상메서드와 상수만을 멤버로 가질 수 있다.

- 클래스 작성에 도움을 줄 목적으로 사용된다.

- 구성요소는 추상메서드와 상수만 가능하다.

- 다중상속이 허용된다.

- Object클래스와 같은 최고 조상이 없다.

- 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.

'JAVA의 정석' 카테고리의 다른 글

7.객체지향개념2 - 다형성(polymorphism)  (0) 2015.07.20

다형성(polymorphism)


1.다형성이란?

조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는것.

Tv t = new Tv();

CaptionTv c = new CaptionTv();


=> Tv t = new CaptionTv();

Tv가 조상타입, CaptionTv가 자손타입.


2.반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.


3.참조변수의 형변환

- 서로 상속관계에 있는 타입간의 형변환만 가능하다.

- 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능.

- 조상타입에서 자손타입으로 형변환 불가.

class Car{}

class FireEngne extends Car{}


Car car = null;

FireEngine fe = new FireEngine();

FireEngine fe2 = null;


car = fe; //(Car 생략가능)

fe2 = (FireEngine) car;



4.instanceof연산자

- 참조변수가 참조하는 인스턴느의 실제타입을 체크하는데 사용.

- instanceof의 연산결과가 true이면, 해당타입으로 형변환이 가능하다.


5.참조변수와 인스턴스변수의 연결

참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를  넘겨 줄 수 있다.


class Product{}

class Tv extends Product {}

class Computer extends Product {}

class Audio extends Product {}


Tv tv = new tv();

Computer com = new Computer();


void buy (Tv t) {

money-=t.price;

bonusPoint += t.bonusPoint;

}


위와 같이 한다면 모든 제품을 등록할 때마다 buy함수를 추가해 주어야 한다.

따라서 위의 buy 메서드는 다음과 같이 바꿀 수 있다.


Product p1 = new Tv;();

Product p2 = new Computer();

Product p3 = new Audio();


void buy(Product p){

money-=p.price;

bonusPoint += p.bonusPoint;

}

매개변수가 Product타입의 참조변수라는 것은, 메서드의 매개변수로 Product클래스의 자손타입의 참조변수면 어느 것이나 매개변수로 받아들일 수 있다는 뜻이다.

6.조상타입의 배열에 자손들의 객체를 담을 수 있다.

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();


'JAVA의 정석' 카테고리의 다른 글

7.객체지향개념2 - 추상클래스와 인터페이스  (0) 2015.07.20

+ Recent posts