1. 추상 메서드
추상 메서드란???
추상 메서드는 선언부만 정의하고 내용은 비워놓은 메서드이다.
구체적인 내용을 적지 않았기 때문에 이를 상속받은 하위클래스에서는 반드시 오버라이딩을 해야한다.
2. 추상 클래스
추상 클래스란???
추상 클래스는 추상 메서드를 멤버로 가지는 클래스이다.
추상 클래스는 일반적인 메서드도 가질 수 있지만 추상 메서드를 하나라도 포함하는 클래스이다.
주의할 점 : 추상 클래스는 인스턴스를 생성할 수 없으며 자손클래스를 완전하게 작성하기 위한 기본적인 틀이다.
📋 코드
package chapter07;
abstract class Pokemon
{
String name;
abstract void attack();
abstract void sound();
public String getName()
{
return name;
}
}
class Pikachu extends Pokemon
{
Pikachu() {
name="피카츄";
}
void attack()
{
System.out.println("전기공격");
}
void sound()
{
System.out.println("피카 피카!");
}
}
class Squirtle extends Pokemon
{
Squirtle() {
name="꼬부기";
}
void attack()
{
System.out.println("물 공격!");
}
void sound()
{
System.out.println("꼬북 꼬북!");
}
}
public class ch07_8 {
public static void main(String[] args) {
Pikachu pikachu1 = new Pikachu();
System.out.println("이 포켓몬은:" + pikachu1.getName());
pikachu1.attack();
pikachu1.sound();
Squirtle squirtle1 = new Squirtle();
System.out.println("이 포켓몬은:" + squirtle1.getName());
squirtle1.attack();
squirtle1.sound();
}
}
📕 해설
1. Pokemon 클래스는 추상클래스이기 때문에 추상 메서드들을 작성하였다.
2. 추상 메서드로 인해 자손 클래스에서도 void attack(),void sound() 함수를 구체적으로 작성해야한다.
3. pikachu1 변수에 Pikachu 클래스의 인스턴스를 생성한다.
4. 출력과 동시에 attack(); sound(); 를 실행한다.
👨🏻💻 결과
이 포켓몬은:피카츄
전기공격
피카 피카!
이 포켓몬은:꼬부기
물 공격!
꼬북 꼬북!
3.인터페이스(Interface)
인터페이스란???
물체들 사이에서 상호작용을 하기위한 매개체 역할을 하며 부속품같은 존재이다.
왜 써야하는가???
클래스가 설계도라면 인터페이스는 설계시 필요한 목록을 적어놓은 종이다.
종이를 바탕으로 설계도를 작성하듯 인터페이스를 바탕으로 클래스를 작성할 수 있다.
📋 코드
package chapter07;
interface Providable
{
void leisureSports();
void sightseeing();
void food();
}
class koreaTour implements Providable
{
public void leisureSports()
{
System.out.println("한강에서 수상스키 투어");
}
public void sightseeing()
{
System.out.println("경복궁 관람투어");
}
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 ch07_9 {
public static void main(String[] args) {
TourGuide guide = new TourGuide();
guide.leisureSports();
guide.sightseeing();
guide.food();
}
}
📕 해설
1. guide 변수에 TourGuide 클래스의 인스턴스 생성
2. guide.leisureSports(); guide.sightseeing(); guide.food(); 를 호출
3. tour 변수에 providable 타입의 변수를 koreaTour 클래스 인스턴스 생성
4. 각각의 추상 메서드를 호출하여 출력
👨🏻💻 결과
한강에서 수상스키 투어
경복궁 관람투어
전주 비빔밥 투어
4.인터페이스와 다형성
특정한 인터페이스를 구현한 인터페이스는 해당 인터페이스 타입의 참조변수로 참조가 가능하다.
예시)
인터페이스명 참조변수이름 = new 클래스명();
📋 코드
package chapter07;
import java.security.PublicKey;
interface Camera
{
void Photo();
}
interface Call
{
void Calling();
}
interface Memo
{
void write();
}
interface Clock
{
void clock();
}
class MyCellPhone implements Camera,Call,Memo,Clock
{
public void clock() {
}
public void write() {
}
public void Calling() {
}
public void Photo() {
}
}
class PhoneUser
{
void call(Call c)
{
System.out.println("전화를 걸었습니다");
}
}
public class ch07_10 {
public static void main(String[] args) {
MyCellPhone phone1 = new MyCellPhone();
Camera phone2 = new MyCellPhone();
Call phone3 = new MyCellPhone();
Memo phone4 = new MyCellPhone();
Clock phone5 = new MyCellPhone();
PhoneUser user1 = new PhoneUser();
user1.call(phone3);
user1.call(phone1);
}
}
👨🏻💻 결과
전화를 걸었습니다
전화를 걸었습니다