My footsteps

추상클래스 본문

예습/code

추상클래스

밀김 2023. 1. 14. 12:58
728x90

 

 

 

 

abstract class Plyer{ //추상클래스 Plyer(=미완성 설계도)
	abstract void play(int pos); //매개변수 有
	abstract void stop(); //매개변수 無
	//play,stop는 추상매서드라서 구현부 { } 가 없어도 됨 
}

class AudioPlyer extends Plyer{ //추상클래스 Plyer는 반드시, 자손과 상속관계로 묶여야만 작동시킬수 있다.
	void play(int pos) {System.out.println(pos+"부터 재생합니다.");}
	void stop() {System.out.println("멈춤");}
}

class Ex7_9 {
	public static void main(String args[]) {
//		AudioPlyer ap = new AudioPlyer();
//		ap.play(50);
//		ap.stop();
		//1. 정상클래스인 AudioPlyer로 객체를 만들어서 그 안에 있는 추상매서드 play,stop을 작동시키는 방법
		Plyer ap = new AudioPlyer();
		ap.play(50);
		ap.stop();
		//2. 추상클래스 Plyer는 정상클래스 AudioPlyer로 인해 설계도가 만들어졌기 때문에 객체 생성도 가능하다.(=다형성)
		//Plyer ap는 그저 객체를 작동하기 위한 리모컨이다. 리모컨하고 연결된 값을 다 갖고 있는(부모 Plyer의 값까지 다 갖고있는 AudioPlyer)
		//정상적인 객체가 때문에 리모컨 이름을 바꿔도 오류가 나지 않는것임.
	}
}

 

 

 

 

abstract class Unit{ //추상클래스
	int x,y; 
	abstract void move(int x,int y); //추상매서드
	void stop() {} //정상매서드
}

class Marine extends Unit{
	void move(int x,int y) {
		System.out.println("마린의 x좌표: "+x+" y좌표: "+y);
	}
	void stimPack() {}
}

class Tank extends Unit{
	void move(int x,int y) {
		System.out.println("탱크의 x좌표: "+x+" y좌표: "+y);
	}
	void changeMode() {}
}

class Dropship extends Unit{
	void move(int x,int y) {
		System.out.println("선박의 x좌표: "+x+" y좌표: "+y);
	}
	void load() {}
	void unload() {}
}




public class Chooo {
	public static void main(String[] args) {
		Unit[] group = {new Marine(),new Tank(),new Dropship()}; //Unit타입인 세객체를 한줄로 정리하는법.왼쪽부터 0,1,2부여
	
		for(int i=0; i < group.length; i++) //여기서i는 group[0] 괄호안 숫자를 의미
			group[1].move(100, 200);
	}
}

 

 

 

abstract class Kim{
	int x,y;
	abstract void player1(int r, int u);
}



class Marine2 extends Kim{
	void player1(int r, int u) {
		System.out.println("x의값은?"+r+" y의 값은?"+u);
	};//부모의 매서드를 꼭 공통으로 다 받아야만 하는듯?
	void player2() {} //매개변수가 없는건..반환못혀
}

class Tank2 extends Kim{
	int t;
	void player1(int r, int u) {};
	void player3(int x,int y) {}
}





public class Coffee {
	public static void main(String[] args) {
		Kim[] k = {new Marine2(), new Tank2()};
		
		for(int i=0; i < k.length; i++) {
			k[0].player1(10, 20);
			//k[]괄호 안에 어떤게 연결되어있는지 그림그리면서 파악하기!!
		}
	}
}


///★★★★★★★★★★★★★이거 티스토리에 올려라!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/////

 

 

 


내가 보려고 정리해놓는 추상클래스 작성방법

 

1. 부모뻘 추상클래스를 만든다(밑에 매서드들도 추상매서드가 됨) + abstract 생략 불가능

2. 부모에게 상속받는 자식 클래스들을 만든다

3.  main매서드로 넘어가서

4. 객체를 만들어줌

5. 만들어준 객체에 자식클래스 갯수만큼 자식클래스 객체를 만들어서 대입(=)시켜준다

5. 반복문을통해...반환 (그때그때 상황에 맞게)

 

 

 

추상클래스를 만든는 이유는?

공통된건 묶고 해서 유지보수를 쉽게 하려고.

가라로  설계도 틀만 만들어놓는다고 생각하면 쉽다. 유동성있게 그에 맞는 필요한 값을 넣고 반환하는


 

 

 

 

 

+참고

 

 

https://cloudstudying.kr/questions/49

 

자바 입문 void 타입에 관하여 | CloudStudying

# void 타입 메소드는 값을 반환하지 않습니다. void 타입 메소드에 return 키워드가 사용되었다면, 이는 값을 반환 하는 것이 아니라 메소드를 종료 하는 것입니다. ## void 메소드에서 return을 사용한

cloudstudying.kr

 

 

 

728x90

'예습 > code' 카테고리의 다른 글

인터페이스 사용 이유  (0) 2023.01.14
인터페이스의 다형성  (0) 2023.01.14
여러 종류의 객체를 배열로 다루기  (0) 2023.01.13
매개변수 다형성  (0) 2023.01.13
참조변수 형변환  (0) 2023.01.13