예습/code

인터페이스의 다형성

밀김 2023. 1. 14. 14:03
728x90

 

 

 

 

abstract class Unit2{
	int x,y;
	abstract void move(int x,int y);
	void stop() {System.out.println("멈춤");}
}

interface Fightable { //인터페이스 매서드 생성
	void move(int x,int y); //앞에 public이 다 생략되어있는 상태
	void attack(Fightable f);
}

class Fighter extends Unit2 implements Fightable{ //유닛2를 상속받은 자식 파이터가, 인터페이스인 파이터볼을 구현한다
	public void move(int x,int y) { //public을 생략하면 에러뜸. 조상이 퍼블릭인데 자손이 퍼블릭을 떼버리면 제어자 범위가 좁아지는거라.
		System.out.println("["+x+"] , ["+y+"] 로 이동");
	}
	public void attack(Fightable f) {
		System.out.println(f+"를 공격");
	}
	Fightable getFightable() { //인터페이스 파이터볼 형태로 새로운 매서드 겟파이터볼 매서드 생성
		Fighter f = new Fighter(); //이 안에는 인터페이스 파이터볼을 구현한 유닛2의 자식 파이터가 올수있음.(왼쪽)
		//Fightable도 올수있다. 하지만 오른쪽은 Fighter만 올수있는데 그 이유는, 왼쪽객체를 오른쪽에 대입하는것이기 때문에 인터페이스인(미완성 설계도)
		//Fightable은 오른쪽에 올수가 없다.
		return f;
	}
}

public class Coffee {
	public static void main(String[] args) {
			Fighter f = new Fighter();
			f.move(100, 200);
			f.attack(new Fighter()); //attack는 반환 형태가 없기때문에 (int 처럼..)new로 호출해주는듯?
			f.attack(f);
		}
	}

 

 

 

 

 

abstract class form{ //부모 추상클래스
	int x,y;
	abstract void member();
	void age(int x, int y) {};
}

interface space { //인터페이스
	void member();
	void sprit(space s);
}

class student extends form implements space{
	public void member() {
		System.out.println("2명");//객체 부르기?
	}
	public void age(int x, int y) {
		System.out.println("학생 나이 : "+x+","+y);
	}
	public void sprit(space s) {
		System.out.println(s+"입니다");
	}
	space sprit() {
		space n = new student();
		return n;
		
	}
	//인터페이스 space를 반환하려면 
	//1.인터페이스 매소드에 반환타입이 인터페이스 이름+변수 인 지역번수(sprit) 생성해주고
	//2.구현부가 만들어지는 클래스에서 다시한번 어떤값을 반환할건지 호출하고
	//3.인터페이스 이름+지역변수(sprit) 해서 매개변수 없이 매서드 만든 다음에
	//4.값 호출할꺼니까 void붙이지 말고!
	//5.인터페이스 객체나,자손객체 생성해서 리턴값 넣어주고
	//6.메인매서드에서 실행하면 된다
}



public class CorreePrc {
	public static void main(String[] args) {
		student s = new student();
		s.age(28, 30);
		s.member();
		s.sprit(s);
		
	}

}

 

 

 

 

 

 

728x90