JAVA/java 공부

[JAVA] 추상메서드 / 추상클래스

congs 2023. 3. 26. 13:53
  1. 추상메서드 : 메서드의 선언부만 있고, 구현은 없는 메서드
  2. 추상클래스: 추상메서드 + 일반메서드 + 멤버변수 + 상수(final)
    • 미완성 클래스라 객체를 생성할 수 없음

 

 

abstract : 이는 미완성이니 객체가 없어도 오류x

  1. 위치 : 클래스 or 메서드의 앞
  2. 사용 방법
    • abstract 리턴타입 메서드명 (매개변수);
  3. 사용하는 경우
    • 부모 클래스에서 상속받았을 경우, 특정메서드가 자식 클래스에 자주 오버라이딩될때
    •       → 해당메서드를 추상 메서드로 작성
    • ⭐ 상속을 받은 클래스 ⇒ 추상메서드가 있다면 반드시 구현해야 함!
public class 추상클래스01 {

	public static void main(String[] args) {
		Dog d =new Dog("멍멍이","개과");
		d.printInfo();
		d.howl();
		
		Cat c = new Cat("다래","고양이과");
		c.printInfo();
		c.howl();
		
		Tiger t = new Tiger("호랭우이","고양이과");
		t.printInfo();
		t.howl();
		
		//추상클래스는 객체 생성이 불가능
	}

}
//Animal 클래스 = 추상클래스
abstract class Animal{ 
	private String name;
	private String category;
	
	public void printInfo() {
		System.out.println("==========");
		System.out.println("이름: " + name);
		System.out.println("분류: " + category);
	}
	
	abstract public void howl(); 
//추상메서드 -> 사용시 클래스도 추상클래스여야함 -> abstract class Animal
//interface는 추상메서드라는 의미를 담고 있어서 abstract를 붙이지 않아도 추상으로 인식


	
	//setter,getter
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getCategory() {
		return category;
	}
	
	public void setCategory(String category) {
		this.category = category;
	}
	
}

//=========================================================================

//추상 클래스 Animal을 상속 받는 class
//추상 클래스를 상속받는 자식 메서드는 반드시 추상메서드를 구현해야함! 
//(단, 자식클래스가 추상일 경우x)
class Dog extends Animal{

	public Dog() {}
	public Dog (String name, String category) {
		super.setName(name);
		super.setCategory(category);
	}
	
	@Override
	public void howl() {
		System.out.println("멍멍!");
		
	}
	
	
}	
class Cat extends Animal{
	
	public Cat (String name, String category) {
		super.setName(name);
		super.setCategory(category);
	}
	
	@Override
	public void howl() {
		System.out.println("야옹!");
		
	}
	
	
}

class Tiger extends Animal{
	
	public Tiger (String name, String category) {
		super.setName(name);
		super.setCategory(category);
	}
	
	@Override
	public void howl() {
		System.out.println("어흥!");
		
	}
	
	
}

'JAVA > java 공부' 카테고리의 다른 글

[JAVA] 내부 class, 익명 class  (0) 2023.09.12
[JAVA] BigDecimal 정확한 실수 표현  (0) 2023.03.26
[JAVA] interface 인터페이스  (0) 2023.03.26
[JAVA] LocalDateTime  (0) 2023.03.26
[JAVA] SimpleDateFormat  (0) 2023.03.26