Java 오버로드 , 오버라이드

Java 오버로드 , 오버라이드


  1. 상속의 이해
    상속을 이용하여 설계할 때는 공통적인 코드를 어떤 클래스에 넣은 다음, 다른 더 구체적인 클래스에 공통적인(더 추상적인) 클래스가 상위클래스라는 것을 알려주면 됩니다. 한 클래스가 다른 클래스를 상속하는 것을하위클래스가 상위클래스로부터 상속받는다고 말합니다.
    자바에서는 하위클래스가 상위클래스를 확장(extend)한다고 얘기합니다. 상속이라는 관계는 하위클래스가 상위클래스의 맴버를 물려받는다는 것을 의미합니다. 인스턴스 변수와 메소드를 “클래스의 맴버”라고 부릅니다.
  • 인스턴스 변수(상태,속성)

. picture: 그 동물의 모습을 보여주는 JPEG 파일명
. food: 그 동물이 먹는 음식의 형식. 일단은 meat(고기)와 grass(풀), 이렇게 두 가지만 있다고 가정
. hunger: 그 동물의 배고픈 정도를 나타내는 int 변수
. boundaries: 그 동물이 돌아다니는 ‘공간’의 높이와 너비
. location: 공간 내에서 그 동물이 있는 위치를 나타내는 x와 y좌표

  • 메소드(행동)
    . makeNoise(): 동물이 소리를 낼 때의 행동
    . eat(): 그 동물이 음식(meat or grass)을 접했을 때의 행동
    . sleep(): 그 동물이 잠들어 있을 때의 행동
    . roam(): 그 동물이 먹거나 자고 있지 않을 때의 행동(그냥 먹이를 찾아 다닐때의 행동)

Animal(상위클래스)
인스턴스: picture, food, hunger, boundaries, location
메소드: makeNoise(), eat(), sleep(), roam()
Tiger, Cat, Wolf, Dog(하위클래스)
메소드: makeNoise(), eat()
하위클래스는 상위클래스의 메소드를 가져올 수 있다.
‘A는 B다’와 ‘A에는 B가 있다’의 관계이다.

  1. 오버라이드
    상위클래스의 메소드를 오버라이드하여 메소드를 변경 할 수 있습니다.
    Dog를 예로 들면 상위클래스의 메소드 eat()에서 음식을 보고 침을 흘렸습니다. 근데 하위클래스의 메소드 eat()에서 똑같이 침을 흘리지 않고 꼬리를 흔들게 하였습니다. Dog의 eat()을 오버라이드 했다고 다른 동물들도 같이 행동을 하게 하는 것이 아닙니다.
    오버라이드하는 메소드의 인자와 리턴 형식은 외부에서 보기에 상위클래스에 있는 오버라이드를 당하는 메소드와 완벽하게 일치해야 합니다.

[상위클래스]
Animal a = new Animal();
a.eat();
eat(){침을 흘려라.}

[하위클래스]<= extend Animal 한 클래스
Dog d = new Dog();
d.eat(); // Animal의 eat() 위에 override한 eat()
eat(){꼬리를 흔들어라.}

  1. 오버로딩
    메소드 오버로딩(overloading)은 이름이 같고 인자 목록이 다른 메소드 두 개를 만드는 것입니다. 오버로드된 메소드는 다형성과는 전혀 관계가 없습니다.
    오버로드하는 메소드에서는 상위클래스에서 정의한 다형성 계약을 이행하지 않아도 되기 때문에 메소드 오버로딩은 훨씬 더 융통성이 좋다고 할 수 있습니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class Overloads {
    String uniqueID;

    public int addNums(int a, int b) {
    return a + b;
    }

    public double addNums(double a, double b) {
    return a + b;
    }

    public void setUniqueID(String theID) {
    // 여러 가지 검증 과정을 거치고 나서 다음을 실행
    uniqueID = theID;
    }

    public void setUniqueID(int ssNumber) {
    String numString = "" + ssNumber;
    setUniqueID(numString);
    }
    }
Share