예습/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