빅데이터 서비스 교육/Java

Java Interface

Manly 2022. 5. 6. 11:02
반응형

 

인터페이스 예제

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