[JAVA] 인터페이스

XXXX·2024년 1월 9일
0
post-thumbnail

인터페이스

  • 다중 상속처럼 사용할 수 있는 기능
  • 추상 메소드와 상수만으로 이루어짐
접근제어자 interface 인터페이스이름 {
	public static final 타입 상수이름 = 값; // 상수 (값 변경 불가능)
	public abstract 반환타입 메소드이름(매개변수); // 추상 메소드
	...
}

class 클래스이름 implements 인터페이스이름 {
	...
}

상속과 인터페이스 동시 사용

  • 동시 사용으로 다중 상속과 같은 효과
접근제어자 interface 인터페이스이름 {
	...
}

접근제어자 class 클래스이름 {
	...
}

class 클래스이름 extends 클래스이름 implements 인터페이스이름 { // 클래스의 내용도 상속 받고, 인터페이스의 내용도 가져올 수 있다. (다중 상속처럼 이용 가능)
	...
}

// Java 프로그래밍 - 인터페이스

import com.sun.security.jgss.GSSUtil;

// School 인터페이스
interface School {
    public static final int MAX_CLASS = 20; // 상수1
    public static final int MAX_PERSON_PER_CLASS = 40; // 상수2
    public abstract void printSchool(); // 추상 메소드
}

// Student 클래스 - School 인터페이스 이용

class Student implements School {
    public void printSchool() {
        System.out.println("00 University");
    }
}


// Person 클래스
class Person {
    public String name;

    public void printName() {
        System.out.println("Name: " + name);
    }
}


// Student2 클래스 - Person 상속, School 인터페이스 이용
class Student2 extends Person implements School {
    Student2(String name) {
        super.name = name;
    }

    public void printSchool() {
        System.out.println("11 University");
    }
}



public class Main {

    public static void main(String[] args) {

//      1. 인터페이스 기본 사용
        System.out.println("== 기본 인터페이스 ==");
        Student s1 = new Student();
        s1.printSchool();
        System.out.println(s1.MAX_CLASS);
        System.out.println(s1.MAX_PERSON_PER_CLASS);


//      2. 다중 상속처럼 사용하기
        System.out.println("== Like 다중 상속 ==");
        Student2 s2 = new Student2("A");
        s2.printSchool();
        s2.printName();

    }

}

// Practice
// 아래 GreenOrc 클래스와 NPCSystem, UserSystem 인터페이스를 이용하여
// OrkNPC1, OrkUser1 클래스를 만들어보세요.


abstract class GreenOrc {
    public final String SKIN_COLOR = "녹색";
    public int health;
    public int attackDamage;
    public int defense;

    public abstract void setHealth();
    public abstract void setDamage();
    public abstract void setDefense();
}

interface NPCSystem {
    public abstract void conversationSystem();
    public abstract void questionSystem();
}

interface UserSystem {
    public abstract void partySystem();
    public abstract void tradeSystem();
}

// OrkNPC1 클래스
class OrkNPC1 extends GreenOrc implements NPCSystem {
    @Override
    public void setHealth() {
        this.health = 100;
    }

    @Override
    public void setDamage() {
        this.attackDamage = 10;
    }

    @Override
    public void setDefense() {
        this.defense = 5;
    }

    @Override
    public void conversationSystem() {
        System.out.println("안녕");
        System.out.println("요즘 새로운 소식 없나요?");
    }

    @Override
    public void questionSystem() {
        System.out.println("새로운 퀘스트");
        System.out.println("퀘스트 완료");
    }
}

// OrkUser1 클래스
class OrkUser1 extends GreenOrc implements UserSystem {
    @Override
    public void setHealth() {
        this.health = 200;
    }

    @Override
    public void setDamage() {
        this.attackDamage = 20;
    }

    @Override
    public void setDefense() {
        this.defense = 10;
    }

    @Override
    public void partySystem() {
        System.out.println("파티 초대");
        System.out.println("파티 수락");
    }

    @Override
    public void tradeSystem() {
        System.out.println("거래 신청");
        System.out.println("거래 완료");
    }
}

public class Practice {
    public static void main(String[] args) {
        // Test code
        // No test code
    }
}

0개의 댓글