728x90
상속(Inheritance)이란?
자식 클래스가 부모 클래스의 기능을 그대로 물려받을 수 있는 기능이다.
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() { // 기능 확장
System.out.println(this.name+" zzz");
}
}
public class Sample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name); // poppy 출력
dog.sleep(); // poppy zzz 출력
}
}
IS-A 관계
"Dog is a Animal"과 같이 말할 수 있는 관계를 IS-A 관계라고 한다.
이렇게 IS-A 관계(상속 관계)에 있을 때 자식 클래스의 객체는 부모 클래스의 자료형인 것처럼 사용할 수 있다.
Animal dog = new Dog // Dog is a Animal
※ 다만 여기서 주의해야 할 점은 자식 클래스 객체를 부모 클래스 자료형으로 사용할 경우에는 자식 클래스에만 존재하는 메소드를 사용할 수 없다는 점이다.
Object 클래스
자바에서 만드는 모든 클래스는 Object 클래스를 상속받는다.
따라서 모든 객체는 Object 자료형으로 사용할 수 있다.
Object animal = new Animal(); // Animal is a Object
Object dog = new Dog(); // Dog is a Object
메소드 오버라이딩(Method overriding)
부모 클래스의 메소드를 자식 클래스가 동일한 형태로 다시 구현하는 것을 의미한다.
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() {
System.out.println(this.name + " zzz");
}
}
class HouseDog extends Dog {
void sleep() {
System.out.println(this.name + " zzz in house");
}
}
public class Sample {
public static void main(String[] args) {
HouseDog houseDog = new HouseDog();
houseDog.setName("happy");
houseDog.sleep(); // happy zzz in house 출력
}
}
메소드 오버로딩(Method overloading)
입력 항목이 다른 경우 동일한 이름의 메소드를 만들 수 있는 것을 의미한다.
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() {
System.out.println(this.name + " zzz");
}
}
class HouseDog extends Dog {
void sleep() {
System.out.println(this.name + " zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + " zzz in house for " + hour + " hours");
}
}
public class Sample {
public static void main(String[] args) {
HouseDog houseDog = new HouseDog();
houseDog.setName("happy");
houseDog.sleep(); // happy zzz in house 출력
houseDog.sleep(3); // happy zzz in house for 3 hours 출력
}
}
다중 상속
자바에서는 다중 상속을 지원하지 않는다.
다중 상속을 지원하게 되면 상속받은 클래스들에 동일한 이름의 메소드가 있을 경우 어떠한 클래스의 메소드를 실행해야 할지 애매모호한 부분이 생기게 된다.
※ 다중 상속을 지원하는 다른 언어들은 이렇게 동일한 메소드를 상속받는 경우 우선 순위 등을 적용하여 해결한다.
부모 생성자 호출
자식 객체를 생성하면, 부모 객체를 먼저 생성한 후 자식 객체가 그 다음에 생성된다.
자식 클래스 생성자 첫 줄에 부모 클래스(객체)를 나타내는 super 키워드를 사용해 부모 클래스의 생성자를 선언한다.
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
}
class Dog extends Animal {
int age;
public Animal(String name, int age) {
super(name);
this.age = age;
}
}
728x90
'2022 하계방학 SW 집중교육' 카테고리의 다른 글
[Java] Coding Convention (0) | 2022.08.11 |
---|---|
[Java] this (0) | 2022.08.11 |
[Java] Abstract (0) | 2022.08.11 |
[Java] Scanner (0) | 2022.08.11 |
[Java] Constructor (0) | 2022.08.11 |