JAVA

[JAVA] 추상 클래스(abstract class)

멍정 2023. 9. 15. 12:20

멍하

돌아온 자바공부 5일차입니다.

18강 추상

https://youtu.be/W683VoXgan4?si=eCifQoxTKoJscziS

추상(abstract) : 다른 클래스는 추상 클래스를 상속받아 사용한다. // 다른 클래스(사용하는 클래스)에서 모든 메소드를 클래스에서 생성하면 무슨 메소드가 있는지 구별하기 어렵기 때문에 어떤 기능이 필요할지 생각하여 추상 클래스에 메소드를 만들어놓고 각각의 다른 클래스에서 내용을 만들어서 사용?

 

+ 메소드 : 클래스 안에 있는 함수를 메소드라고 부름!

새로운 Animal 클래스를 생성하고 상속클래스로 변경해줌

abstract class 클래스명 { }

//Player.java
abstract class Player {
	abstract void play(String songName);
	abstract void pause();
	abstract void stop();
}

main class에서 Player 클래스를 상속 받기 위해 extends를 해줌

public class Main extends Player { }

Player를 상속받으면 x표시가 뜨는데 메소드를 받아옴

생성된 메소드를 사용하기 위해서 main 메소드에서 main 형으로 main을 선언하여 메소드를 사용

//main.java
public class Main extends Player {
	public static void main(String[] args) {
		
		Main main = new Main(); //main 변수 선언
		main.play("sekaoka");
		main.pause();
		main.stop();
	}

	@Override //추상클래스에서 받아온 메소드라는 의미?
	void play(String songName) {
		// TODO Auto-generated method stub
		System.out.println(songName + " 곡을 재생합니다.");
	}

	@Override
	void pause() {
		// TODO Auto-generated method stub
		System.out.println("곡을 일시정지합니다.");

	}

	@Override
	void stop() {
		// TODO Auto-generated method stub
		System.out.println("곡을 정지합니다.");

	}
}

Animal 클래스를 추상클래스로 생성한 후 crying 메소드를 넣어줌

//Animal.java
abstract class Animal {
	abstract void crying();
}

Dog 클래스에서 Animal 클래스를 상속받아 crying 메소드를 만들어줌

//Dog.java
public class Dog extends Animal{

	@Override
	void crying() {
		// TODO Auto-generated method stub
		System.out.println("멍멍");
	}
}

Cat 클래스에서도 Animal 클래스를 상속받아 crying 메소드를 만들어줌

//Cat.java
public class Cat extends Animal{

	@Override
	void crying() {
		// TODO Auto-generated method stub
		System.out.println("야옹");
	}
}

main 클래스에서 dog과 cat을 선언하여 메소드를 사용함

//main.java
public class Main {
	public static void main(String[] args) {
		
		Dog dog = new Dog();
		Cat cat = new Cat();
		dog.crying();
		cat.crying();
		
	}
}

상속 받아서 어떤 메소드가 필요한지 알 수 있지만 그걸 좀 더 자유롭게 사용할 클래스의 내용에 맞게 만들어주는걸까?