Java 20221104

신래은·2022년 12월 15일

JAVA

목록 보기
14/22

DAY 15

상속 : 어떤 클래스의 변수와 메소드를 다른 클래스가 물려 받을 수 있는 기능
만약, class Dog extends Animal 라고 상속문을 쓴다면
Dog is a Animal이라고 생각할 수 있음

Polymorphism & Inheritance - by animal

Animal Class

public class Animal {
    String name;
    String color;
    public Animal(){}
    public Animal (String name, String color) {
        // this(); // 생성자
        // this 포인터
        if(name.length() == 0) {
        this.name = "동물";
        }
        else {
        this.name = name;
        }
        this.color = color;
    }
    void makeSound(){
        System.out.println("동물" + name + "이(가) 소리를 냅니다.");
    }
}

Dog Class

public class Dog extends Animal {
    String size;
    public Dog (){}
    public Dog(String name, String color, String size) {
        super(name, color);
        this.size = size;
    }
    // 상위 클래스의 메서드 makeSound를 오버라이딩 했다.
    // 기능 재정의 했다. 
    // Dog 타입의 객체들은 Animal클래스의 makeSound를 실행하지 않고
    // 아래의 makeSound를 실행한다.
    @Override
    void makeSound(){
        System.out.println(size + "견 " + name + "이(가) 멍멍 짖습니다.");
    }
    
}

Cat Class

public class Cat extends Animal {
    String eyecolor;
    public Cat (){}
    public Cat (String name, String color, String eyecolor){
        super (name, color);
        this.eyecolor = eyecolor;
    }

    @Override
    void makeSound() {
        System.out.println(eyecolor + " 눈을 가진 " + color + " 고양이 " + name + "가(이) 야옹하고 웁니다.");
    }
    
}

Lion Class

public class Lion extends Cat{
    Integer age;
    public Lion (){}
    public Lion (String name, String color, String size, Integer age){
        super(name, color, size); // Cat 클래스 생성자
        this.age = age;
    }
}

Overriding (오버라이딩)

메소드 오버라이딩이란, 상속의 관계에 있는 클래스 간에 '완전 동일한 메소드'를 덮어쓴다는 의미. 오버라이딩은 이름과 반환형이 같으면서 매개변수의 개수와 타입까지 모두 같은 메소드간에 가능.

a폴더와 b폴더 안에 각각 Class가 생성된 경우

package : 클래스와 인터페이스의 집합, 목적에 따라 묶어서 관리
Class 가장 상단에 package명 선언

a폴더 안의 Class

package a; // 어떤 폴더안에 들어있는지 명확하게 해주기 위해 표시

public class MyClass {
    public void printInfo () {
        System.out.println("a 패키지의 MyClass");
    }
}

b폴더 안의 Class

package b;

public class MyClass {
    public void printInfo () {
        System.out.println("b 패키지의 MyClass");
    }
}

0개의 댓글