반응형
상속
상속은 말 그대로 자식이 부모로부터 무언가를 물려받는 것이다.
클래스 상속을 위해서는 extends 라는 키워드를 사용한다.
자식클래스 extends 부모클래스
상속받은 클래스는 부모클래스 내의 메소드를 그대로 사용할 수 있다.
보통 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 기능에 더하여 좀 더 많은 기능을 갖도록 설계한다.
public class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
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();
}
}
- IS - A 관계
IS-A 관계(상속관계)에 있을 때 자식 객체는 부모 클래스의 자료형인 것처럼 사용할 수 있다.
Animal dog = new Dog();
상속되지 않았을 때에는 Animal dog = new Animal(); 과 같이 사용하지만, 상속 관계에 있을 때는 위와 같이 Aniaml(부모 클래스)를 자료형처럼 사용할 수 있다. 하지만 부모 위에 자식이 있을 수 없듯이 반대로는 사용이 불가능하다.
- 메소드 오버라이딩 (Method overriding)
부모 클래스의 메소드를 자식 클래스가 사용할 수 있는 것처럼(상속), 자식 밑의 클래스 (손자 클래스)도 부모 클래스의 메소드를 이용할 수 있다.
만약 자식 클래스의 메소드와 손자 클래스의 메소드의 이름이 같다면 손자 클래스의 메소드가 더 높은 우선순위를 가지고 있어서 손자클래스의 메소드가 실행된다.
이처럼 부모 클래스의 메소드를 자식 클래스가 동일한 형태로 또다시 구현하는 행위를 메소드 오버라이딩(Method Overriding)이라고 한다. (※ 메소드 덮어쓰기)
- 메소드 오버로딩 (Method overroading)
메소드의 입력항목이 다를 경우 동일한 이름의 메소드를 생성할 수 있다.
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) 메소드 호출
}
}
위의 예제에서 house.sleep()은 첫번째 메소드를 사용했고, house.sleep(3)은 두번째 메소드를 사용하였다.
반응형
'Study > JAVA' 카테고리의 다른 글
[JAVA] class, object, instance 차이 (0) | 2021.10.27 |
---|---|
[점프투자바] 05 객체지향 프로그래밍 05-5 생성자 (0) | 2021.10.22 |
[점프투자바] 05 객체지향프로그래밍 05-2 ~3 메소드 (Method), Call by value (0) | 2021.10.22 |
[점프투자바] 05 객체지향프로그래밍 05-1 클래스 (0) | 2021.10.22 |
[점프투자바] 04장 제어문 04-4 ~ 5 for문, for each문 (0) | 2021.10.21 |