본문 바로가기
개발/JAVA

[JAVA] 상속

by 경주초이 2020. 6. 11.

상속(Ingeritance)

Animal.java

public class Animal {
    String name;

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

Dog.java

public class Dog extends Animal {
	public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
    }
}

Dog 클래스에sleep이라는 메소드를 추가 해보면,

public class Dog extends Animal {
    public void sleep() {
        System.out.println(this.name+" zzz");
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.sleep();
    }
}

이렇듯 보통 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 기능에 더하여 좀 더 많은 기능을 갖도록 설계한다.

 

메소드 오버라이딩 (Method overriding)

이번에는 Dog 클래스를 좀 더 구체화 시키는 HouseDog 클래스를 만들어 보자

HouseDog.java

public class HouseDog extends Dog {
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();
    }
}


happy zzz
public class HouseDog extends Dog {
	
    public void sleep(){
    	System.out.println(this.name + " zzz in house")
    }

    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();
    }
}


happy zzz in house

이렇게 부모클래스의 메소드를 자식클래스가 동일한 형태로 또다시 구현하는 것을 Method Overriding 이라고 한다.

 

메소드 오버로딩(Method overloading)

HouseDog.java

public class HouseDog extends Dog {
	
    public void sleep(){
    	System.out.println(this.name + " zzz in house")
    }

	public void sleep(int hour) {
        System.out.println(this.name+" zzz in house for " + hour + " hours");
    } 
    
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();
    }
}


happy zzz in house

이미 sleep이라는 메소드가 있지만 동일한 이름의 sleep메소드를 또 생성할 수 있다. 단, 메소드의 입력항목이 다를 경우만 가능하다. 새로 만든 sleep메소드는 입력항목으로 hour라는 int 자료형이 추가되었다.

이렇듯 입력항목이 다른 경우 동일한 이름의 메소드를 만들 수 있는데 이를 메소드 오버로딩(method overloading)이라고 부른다.

public class HouseDog extends Dog {
    public void sleep() {
        System.out.println(this.name+" zzz in house");
    } 

    public void sleep(int hour) {
        System.out.println(this.name+" zzz in house for " + hour + " hours");
    } 

    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();     // sleep() 메소드 호출
        houseDog.sleep(3);   // sleep(int hour) 메소드 호출
    }
}


happy zzz in house
happy zzz in house for 3 hours

'개발 > JAVA' 카테고리의 다른 글

[JAVA] 인터페이스  (0) 2020.06.17
[JAVA] 생성자  (0) 2020.06.15
[JAVA] Call by Value  (0) 2020.06.11
[JAVA] 메소드  (0) 2020.06.10
[JAVA] 클래스  (0) 2020.06.08