package CHAPTER06;

class Animal {
	private String name;
	protected String type; // 자식 클래스에서 접근 가능

	public Animal() {
		this.name = "이름 없음";
		this.type = "알 수 없음";
	}

	public Animal(String name) {
		this.name = name;
		this.type = "알 수 없음";
	}

	public String getName() {
		return name;
	}

	public String getType() {
		return type;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setType(String type) {
		this.type = type;
	}
	
	public void printInfo() {  // 동물 정보 출력
		System.out.println("이름: " + name + ", 유형: " + type);
	}
}

// 자식 클래스: Dog
class Dog extends Animal {
	private String breed;

	public Dog() {
		setName("강아지");
		setType("포유류");
		this.breed = "믹스견";
	}

	public Dog(String name, String breed) {
		setName(name);
		setType("포유류");
		this.breed = breed;
	}

	public void printDogInfo() {
		printInfo();
		System.out.println("  품종: " + breed);
	}
}

// 자식 클래스: Cat
class Cat extends Animal {
	private String furColor;

	public Cat() {
		setName("고양이");
		setType("포유류");
		this.furColor = "검정색";
	}

	public Cat(String name, String furColor) {
		setName(name);
		setType("포유류");
		this.furColor = furColor;
	}

	public void printCatInfo() {
		printInfo();
		System.out.println("  털 색상: " + furColor);
	}
}

public class LAB_01_AnimalTest {
	public static void main(String[] args) {
		Dog defaultDog = new Dog();
		defaultDog.printDogInfo();

		System.out.println();

		Dog goldenRetriever = new Dog("바둑이", "골든 리트리버");
		goldenRetriever.printDogInfo();

		System.out.println();

		Cat defaultCat = new Cat();
		defaultCat.printCatInfo();

		System.out.println();

		Cat persianCat = new Cat("나비", "하얀색");
		persianCat.printCatInfo();
	}
}