반응형
인터페이스 예제
Class
package 인터페이스;
import 월급계산프로그램.Employee;
public class Person extends Employee implements Temp, Runnable {
// 다중구현(상속)이 가능하다.
// 일반 클래스 상속을 받으면서 인터페이스 구현도 가능하다.
// runnable -> java에서 기본적으로 제공하는 인터페이스
// 다중구현되는지 확인하려고 적은 인터페이스(thread ppt확인할것)
public Person(String empno,String name, int pay) {
super(empno, name,pay);
}
//추상클래스 vs 인터페이스
//추상클래스
//1. 추상클래스는 일반 메소드 포함이 가능하다.
//2. 추상클래스는 다양한 접근 제한자를 쓸 수 있다.
//3. static, final이 아닌 데이터도 저장할 수 있다.
// 다양한 객체의 상태와 정보를 수정할 수 있다.
//4. 다중상속이 불가능하다
//인터페이스(implements - 구현)
//1. 추상메소드만 가질 수 있다.
//(Java8버전 이상부터 - 일반메서드(바디가 있는거)도 쓸수 있다)
//default(이때 default는 접근제한자가 아니다), static 키워드가 붙어있으면 일반메서드 사용가능
//2. 접근제한자는 무조건 public만 사용가능하다.
//3. 다중구현이 가능하다.
//4. 객체의 행위들을 더 많이 모아놓은 형태
//ex) Runnable -> able -> 할수있는~
//추상메소드 오버라이딩 --> 구현의 강제성
@Override
public int getTemp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void run() {
// TODO Auto-generated method stub
}
@Override
public int getMoneyPay() {
// TODO Auto-generated method stub
return 0;
}
}
Main
package 인터페이스;
public class Main {
public static void main(String[] args) {
//실행공간
Temp temp = new Temp() {
//인터페이스는 객체 생성이 가능하다.
// 단, 추상메소드를 익명의 내부타입으로 오버라이딩 해줘야한다.
@Override
public int getTemp() {
// TODO Auto-generated method stub
return 0;
}
};
}
}
Interface
package 인터페이스;
public interface Temp {
// 추상클래스랑 유사한 형태
// 클래스랑 똑같음!(몇가지 규칙을 지켜야 함)
// 1.필드 --> final(상수) 형태의 데이터만 가질 수 있다.
// --> 접근제한자 public 형태의 데이터만 가질 수 있다.
// --> static 형태의 데이터만 가질 수 있다.
//public static final String name = "박지민";
//final, public, static 키워드는 인터페이스에서 생략이 가능하다
String name = "박지민";
// final --> 굻은글씨 static --> 기울임체
// final은 변수명을 지을 때 전부 대문자를 많이 사용한다.
//상수는 무조건 값을 넣어야 한다.
// 절대 변하면 안되는 데이터들만 interface에 저장한다.
//static: 정적인(고정적으로 메모리(변수or메소드)를 할당)
//static에 저장된 변수는 공유변수로 여러 객체를 생성해서 값을 바꿔도 하나의 최근값만 가진다
//클래스에서 static 키워드를 가진 필드가 있다고 한다면 클래스 설계도면을 기준으로 만든 모든 객체들은
//동일한 값을 가진 static 키워드를 가진 필드를 공유한다 (공유변수) -> static 남발 금지
// static은 공유해야하는 값 (동일한 값을 가져야 하는것들)에 쓴다.
//static 메소드 내에서 사용하는 다른 클래스의 변수or다른 메소드는 모두
//static으로 선언이 되어야 한다. (동일한 저장공간에 있어야한다.)
// 2.메소드
// 추상메소드(구현의 강제성을 띄고 있는 메소드)
//인터페이스에서 메소드는 무조건 추상메소드만 가질 수 있다.(규격만 정해 줄 수 있다.)
// 필드와 같이 abstract 키워드 생략가능.
// public abstract int getTemp();
public int getTemp();
}
인터페이스 포켓몬 게임
Interface
package 인터페이스2;
public interface Poketmon {
//상수, 추상메서드
public static final String value = "포켓몬";
int level = 20; // -> 변수처럼 작성해도 상수만 작성가능하니 상수로 간주
public abstract void attack();
public void moving();
//java8 이상부터는 일반메서드도 작성가능
//단, default, static 으로 작성할 경우에만 작성 가능
public static void hello() {
//앞서 말했던 일반메서드를 default나 static 키워드를 써서 일반메서드를 쓰는것
// 이때 default는 접근제한자가 아니다.
}
}
Main
package 인터페이스2;
public class Main {
public static void main(String[] args) {
Pikachu pika = new Pikachu();
Paili paili = new Paili();
System.out.println(pika.type);
pika.attack();
System.out.println(paili.type);
paili.attack();
//pika와 paili를 같은 배열에 넣으려면
// 배열의 자료형은 poketmon (pika와 paili의 상위클래스인 poketmon 자료형으로)
Poketmon[] myPoket=new Poketmon[2];
myPoket[0] = pika; //업캐스팅
myPoket[1] = paili;
//for-each(확장for문) : 배열/리스트를 다룰때 사용하기 좋은 반복문
for (Poketmon p:myPoket) {
p.attack();
p.moving();
//instanceof : 특정 객체가 어떤 타입인지 확인할때 사용
if(p instanceof Epoketmon) {
//전기타입으로 다운캐스팅
Epoketmon e = (Epoketmon)p;
System.out.println(e.type);
}else if(p instanceof Fpoketmon) {
//불타입으로 다운캐스팅
Fpoketmon f = (Fpoketmon)p;
System.out.println(f.type);
}
}
}
}
구현
package 인터페이스2;
public class Paili implements Fpoketmon {
@Override
public void attack() {
System.out.println("파이리 공격");
}
@Override
public void moving() {
System.out.println("파이리 이동");
}
}
구현
package 인터페이스2;
public class Pikachu implements Epoketmon{
@Override
public void attack() {
System.out.println("피카츄 공격");
}
@Override
public void moving() {
System.out.println("피카츄 이동");
}
}
package 인터페이스2;
public interface Fpoketmon extends Poketmon {
public static final String type = "불";
}
package 인터페이스2;
public interface Epoketmon extends Poketmon{
public static final String type = "전기";
}
반응형
'빅데이터 서비스 교육 > Java' 카테고리의 다른 글
Java 다마고치 게임 예제 (0) | 2022.05.06 |
---|---|
Java 추상클래스 (0) | 2022.05.06 |
Java JDBC (0) | 2022.05.06 |
Java 상속 (0) | 2022.05.06 |
Java Arraylist (0) | 2022.05.06 |