인터페이스란 ?
인터페이스에서는 implements
란걸 사용하는데 여러개의 인터페이스가 존재할수 있다.
package sutdy.java.ex15.interface_1;
public class InterfaceClass implements InterfaceEx, InterfaceEx2 {
@Override
public String getStr() {
System.out.println("Interface2 : 실제 구현 하는곳");
return null;
}
@Override
public void calculate() {
System.out.println("InterFace : 실제 구현 하는곳");
}
}
package sutdy.java.ex15.interface_1;
public interface InterfaceEx {
public static final int CONSTANT_NUM = 1000;
public void calculate();
}
package sutdy.java.ex15.interface_1;
public interface InterfaceEx2 {
public static final String CONSTANT_NUM = "Hello World";
public String getStr();
}
package sutdy.java.ex15.interface_1;
public class MainClass {
public static void main(String[] args) {
InterfaceClass ic = new InterfaceClass();
ic.calculate();
ic.getStr();
/*
* 객체타입이 interfaceEx 이기 때문에
* interface안에 있는 calculate 메소드만 호출가능
*/
InterfaceEx if2 = new InterfaceClass();
if2.calculate();
}
}
인터페이스 예제문제
조건 : 핸드폰 제조사에서 여러가지 3가지 핸드폰 종류를 만든다 그 핸드폰은 종류마다
기능이 다릅니다. 인터페이스를 사용하여 구현해보세요
들어가야하는 기능 : 전화 수/발신 , LTE종류 , 리모콘 기능
package sutdy.java.ex15.interface_1_ex_smartPhone;
public interface SmartPhone {
public void callSendRecevive();
public void LTE();
public void tvRemoteControll();
}
package sutdy.java.ex15.interface_1_ex_smartPhone;
public class APhone implements SmartPhone{
@Override
public void callSendRecevive() {
System.out.println("전화 가능합니다");
}
@Override
public void LTE() {
System.out.println("3G입니다.");
}
@Override
public void tvRemoteControll() {
System.out.println("기본 미탑재");
}
}
package sutdy.java.ex15.interface_1_ex_smartPhone;
public class BPhone implements SmartPhone{
@Override
public void callSendRecevive() {
System.out.println("전화 가능합니다");
}
@Override
public void LTE() {
System.out.println("4G입니다.");
}
@Override
public void tvRemoteControll() {
System.out.println("기본 탑재");
}
}
package sutdy.java.ex15.interface_1_ex_smartPhone;
public class CPhone implements SmartPhone{
@Override
public void callSendRecevive() {
System.out.println("전화 가능합니다");
}
@Override
public void LTE() {
System.out.println("4G입니다.");
}
@Override
public void tvRemoteControll() {
System.out.println("기본 미탑재");
}
}
package sutdy.java.ex15.interface_1_ex_smartPhone;
public class MainClass {
public static void main(String[] args) {
SmartPhone ap = new APhone();
SmartPhone bp = new BPhone();
SmartPhone cp = new CPhone();
// ap.callSendRecevive();
// ap.LTE();
// ap.tvRemoteControll();
SmartPhone[] sp = {ap,bp,cp};
for (int i = 0; i < sp.length; i++) {
System.out.println((i+ 1) + "번째 핸드폰 기능은?");
sp[i].callSendRecevive();
sp[i].LTE();
sp[i].tvRemoteControll();
System.out.println("==========");
}
}
}
문제2 : 배우를 만들어 경찰관 소방관 요리사가 될수 있게 하세요.
package sutdy.java.ex15.interface_1_ex_actor;
public class Actor implements Chef, Police, FireFighter{
@Override
public void outFire() {
System.out.println("소방관은 불을 끌수 있습니다.");
}
@Override
public void saveMan() {
System.out.println("소방관은 사람을 구할수 있습니다.");
}
@Override
public void canCatch() {
System.out.println("경찰은 도둑을 잡을수 있습니다.");
}
@Override
public void canSearch() {
System.out.println("경찰은 물건을 찾을수 있습니다.");
}
@Override
public void makePizza() {
System.out.println("요리사는 피자를 만들수 있습니다.");
}
@Override
public void makeSapaghetti() {
System.out.println("요리사는 스파게티를 만들수 있습니다.");
}
}
package sutdy.java.ex15.interface_1_ex_actor;
public interface Chef {
public void makePizza();
public void makeSapaghetti();
}
package sutdy.java.ex15.interface_1_ex_actor;
public interface Police {
public void canCatch();
public void canSearch();
}
package sutdy.java.ex15.interface_1_ex_actor;
public interface FireFighter {
public void outFire();
public void saveMan();
}
package sutdy.java.ex15.interface_1_ex_actor;
public class MainClass {
public static void main(String[] args) {
Actor at = new Actor();
at.canCatch();
at.canSearch();
System.out.println("========");
at.makePizza();
at.makeSapaghetti();
System.out.println("========");
at.outFire();
at.saveMan();
/*
* 인터페이스 정리 : 인터페이스는 객체 타입은 가능하다, 하지만 생성자? 로 사용할수 없다.
*/
Chef cf = new Actor();
}
}
정리 : 기능을 구현할 자바를 만들고, implements
로 재정의 해야하는 인터페이스를 상속받는다. 인터페이스는 추상클래스 와 상수만 정리를 한다. implements
로 상속받은 자바파일은 반드시 추상클래스를 구현하여야 한다. 인터페이스는 객체를 만들때 인터페이스 자체를 객체로 만들수 없다. 하지만 객체 타입은 가능 위 예제를 통한 객체 만들기 정리
Actor ac = new Actor(); -> 가능
Chef cf = new Actor(); -> 데이터 타입으로 생성했으므로 가능
Chef cf = new Chef(); -> 불가능