티스토리 뷰

Chapter 8. 추상 클래스와 인터페이스 내부 클래스

 

▶ 학습 목표

: 추상이 무엇인지 이해할 수 있다. 인터페이스가 무엇인지 알고 추상과의 차이를 알고 사용한다.

 

 

 

 

8-1. 추상 메서드와 추상 클래스

 

 

- 추상 메서드

: 선언만하고 구체적인 내용은 명시하지 않은 함수

여러 사람들과 같이 작업할 시 코드가 오류나지 않고 병합할 수 있도록 한다.

abstract 명령어를 메서드 앞에 붙여주어 사용한다.

 

abstract void methodA();

 

 

 

- 추상 클래스

: 추상 메서드를 멤버로 가지는 클래스

완전한 코드라기 보다는 기본적인 틀로써 사용된다.

 

 

abstract class Cellphone{

	abstract void methodA();
    
    // 일반 멤버들 생략
    
}

 

 

package Chapter7;
abstract class Pokemon{
	String name;
	
	abstract void attack();
	abstract void sound();
    
	public String getName()  //set이 없으면 변경은 불가능함
	{
		return this.name;
	}

}

class Pikachu extends Pokemon
{
	Pikachu(){
		this.name="피카츄";
	}

	@Override
	void attack() {
		//구체적으로 구현
		System.out.println("전기공격");
		
	}

	@Override
	void sound() {
		System.out.println("피카 피카!");
		
	}
	
}
class Squirtle extends Pokemon{
	Squirtle(){
		this.name="꼬부기";
	}

	@Override
	void attack() {
		System.out.println("물 공격");
		
	}

	@Override
	void sound() {
		System.out.println("꼬북 꼬북!");
		
	}
	
	
}
public class Abstractclass1 {

	public static void main(String[] args) {
		Pikachu pikachu1 = new Pikachu();
		System.out.println("이 포켓몬은 : " +pikachu1.getName());
		pikachu1.attack();
		pikachu1.sound();
		
		Squirtle squirtke1 = new Squirtle();
		System.out.println("이 포켓몬은 : " + squirtke1.getName());
		squirtke1.attack();
		squirtke1.sound();

	}

}

 

 

이 포켓몬은 : 피카츄
전기 공격
피카 피카!
이 포켓몬은 : 꼬부기
물 공격
꼬북 꼬북!

 

 

 

 

 

8-2. 인터페이스

 

 

 

- 인터페이스

: 객체간의 상호작용을 위한 약속(규약)

물체 간 사이에서 상호작용을 위한 매개역할을 한다.

설계시 필요한 것들을 나열해놓은 양식으로 인터페이스를 바탕으로 클래스를 작성한다.

(인터페이스는 완전한 설계도 틀이 아니다)

 

 

 

- 인터페이스 문법

 

interface 인터페이스이름{
	public static final 타입 이름 = 값;
	public abstract 반환타입 메서드이름(매개변수);
}

 

상수 앞에는 public final static / 메서드 앞에는 public abstract 를 붙인다.

 

 

인터페이스는 상수와 추상 메서드를 멤버로 가질 수 있다.

implement를 사용하여 구현한다.

 

* 제어자를 생략해도 에러 발생하지 않음(자동으로 추가됨)

* 자식 클래스는 오버라이딩을 통해 내부의 추상 메서드를 구체적으로 구현해야한다.

* 부모의 접근제어자보다 더 넓거나 같은 범위의 제어자를 사용해야한다.(대부분 public 사용)

* 다중 상속이 가능하다.

 

 

 

class B extends C implements A{

	/C 멤버
	/A 멤버


}

 

 

 

 

interface A {
	void methodA();
}
interface B{
	void methodB();
}
interface C implement A,B{

}

 

→ 추상 메서드 methodA와 methodB 둘 다 멤버로 상속 받는다.

 

 

 

 

 

- 인터페이스의 실제 활용

 

 

package chapter8;

interface providable
{
	void leisuresports();
	void sightseeing();
	void food();   //함수 세개
}

class koreatour implements providable  
//인터페이스와 추상화 같은 양식만 있는것들은 오버라이딩해줘야함(안의 내용은 비었기때매)
//koreatour 클래스는 providable 클래스를 구현함(인터페이스에서 상속=구현)
{

	@Override
	public void leisuresports() 
	{
		System.out.println("한강에서 수상스키 투어");
		
	}

	@Override
	public void sightseeing() 
	{
		System.out.println("경복궁 관람 투어");
		
	}

	@Override
	public void food() 
	{
		System.out.println("전주 비빔밥 투어");
		
	}
	
	
}

class tourguide
{
	private providable tour = new koreatour();
	
	public void leisuresports() 
	{
		tour.leisuresports();
	}
	public void sightseeing() 
	{
		tour.sightseeing();
	}
	public void food() 
	{
		tour.food();
	}
}

public class interface3 
{

	public static void main(String[] args) {
		tourguide guide = new tourguide();
		guide.leisuresports();
		guide.sightseeing();
		guide.food();
	}

}

 

한강에서 수상스키 투어
경복궁 관람 투어
전주 비빔밥 투어

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday