본문 바로가기

2023.11.21-2024.05.31

231218 JAVA Animal, Cat, Dog, Zoo

이 코드는 Animal 클래스를 정의하고 있습니다. 여기서 Animal 클래스는 동물을 나타내며,

이름(name), 나이(age), 품종(breed), 체력(hp)을 나타내는 필드를 포함하고 있습니다.

또한, 생성자를 통해 동물이 태어날 때 초기화되는 작업이 이루어집니다.

 

Animal 클래스:

 package com.sukgi.inheritance;

 

 public class Animal {

 String name;

 int age;

 String breed;

 int hp;

 

 public Animal(String name, int age) {

 System.out.println("동물이 태어납니다.");

 this.name = name;

 this.age = age;

 }

 }

 

  • 필드 (Fields):
    • String name: 동물의 이름을 나타내는 문자열 필드.
    • int age: 동물의 나이를 나타내는 정수 필드.
    • String breed: 동물의 품종을 나타내는 문자열 필드.
    • int hp: 동물의 체력을 나타내는 정수 필드.
  • 생성자 (Constructor):
    • public Animal(String name, int age): 동물이 태어날 때 호출되는 생성자입니다. 이름과 나이를 매개변수로 받아서 동물의 필드를 초기화하고, "동물이 태어납니다."라는 메시지를 출력합니다.

 

Cat 클래스 (Animal을 상속):

 package com.sukgi.inheritance;

 

 public class Cat extends Animal {

 

 public Cat(String name, int age) {

 super(name, age);

 }

 

 }

  • Cat 클래스는 Animal 클래스를 상속합니다 (extends Animal).
  • Cat 클래스의 생성자에서는 super(name, age);를 사용하여 부모 클래스인 Animal의 생성자를 호출하고 있습니다. 이는 부모 클래스의 초기화 코드를 실행함을 의미합니다.

 

 

 

Dog 클래스 (Animal을 상속):

 package com.sukgi.inheritance;

 

 public class Dog extends Animal {

 

 public Dog(String name, int age) {

 super(name, age);

 

 }

 }

  • Dog 클래스도 Animal 클래스를 상속합니다.
  • Dog 클래스의 생성자에서도 super(name, age);를 사용하여 부모 클래스인 Animal의 생성자를 호출하고 있습니다.

 

 

Animal 클래스의 특성을 공유하며, 각각의 생성자에서는 부모 클래스의 생성자를 호출하여 초기화를 수행하고 있습니다. 이는 코드의 재사용성과 확장성을 높이는데 도움이 됩니다. 상속을 통해 Cat 및 Dog 클래스는 Animal 클래스의 속성과 동작을 활용할 수 있습니다.

 

 package com.sukgi.inheritance;

 

 class Mouse extends Animal{

 

 public Mouse(String name, int age) {

 super(name, age);

  }

  //오버라이드 오버라이딩

  //인터페이스는?

 

  //오버로드 오버로딩 !

  //상속 !

  //정적메소드 !

 

 

 }

 

 class ZooKeeper extends Animal{

 public ZooKeeper(String name, int age) {

 super(name, age);

 }

 

 public void feed(Animal animal){

 animal.hp++;

 }

  //오브젝트 = 최상위 클래스

 }

 

 public class Zoo {

 public static void main(String[] args) {

 ZooKeeper keeper = new ZooKeeper("사육사", 30);

 Animal cat = new Cat("3PO", 5);//부모타입 형태로 자식 생성자 사용하기

 Dog dog = new Dog("R2D2", 5);//자식타입이 앞에 오면 에러

 Mouse mouse = new Mouse("미키마우스", 120);

 

 cat = mouse;

 //Dog dog = (Dog) cat;

 

 keeper.feed(cat);

 keeper.feed(dog);

 keeper.feed(mouse);

 

 }

 }

 

ZooKeeper 클래스 (Animal을 상속):

  • ZooKeeper 클래스는 Animal 클래스를 상속합니다.
  • feed 메서드는 동물을 받아와서 체력(hp)을 증가시킵니다.

Zoo 클래스 (main 메서드):

  • Zoo 클래스에서는 ZooKeeper를 생성하고, Cat, Dog, Mouse 인스턴스를 생성합니다.
  • 다형성을 활용하여 Animal 타입으로 Cat과 Mouse를 사용할 수 있습니다.
  • keeper.feed 메서드를 호출하여 각 동물의 체력을 증가시킵니다.