1. 상속
자바에는 자식클래스가 부모클래스의 기능 상속받을 수 있는 상기능이 있다. 예제를 통해 알아보자.
***클래스 상속을 위해서는 extends라는 키워드를 사용한다. 객체 변수 name, setName을 사용하지 않았지만 클래스를 상속받았기때문에 자식클래스에서도 사용이 가능하다.***
class Animal {
String name;
void setName(String name){
this.name = name;
}
}
class Dog extends Animal { //Animal클래스를 상속한다.
}
public class HelloWorld{
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("Dotae");
System.out.println(dog.name);
}
}

ex) 자식 클래스에 기능을 추가해보자.
class Animal {
String name;
void setName(String name){
this.name = name;
}
}
class Dog extends Animal { //Animal클래스를 상속한다.
void sleep() {
System.out.println(this.name + "졸려");
}
}
public class HelloWorld{
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("Dotae");
System.out.println(dog.name);
dog.sleep();
}
}

dog(자식) 클래스에 sleep 기능을 추가하여 더 많은 기능을 사용할 수 있게 되었다.
2. IS-A 관계

3. 메서드 오버라이딩
class Animal {
String name;
void setName(String name){
this.name = name;
}
}
class Dog extends Animal { //Animal클래스를 상속한다.
void sleep() {
System.out.println(this.name + "졸려");
}
}
class HouseDog extends Dog {
}
public class HelloWorld{
public static void main(String[] args) {
HouseDog houseDog = new HouseDog();
houseDog.setName("최다빈");
houseDog.sleep();
}
}
ex) 여기서 실행을 하게 되면 "최다빈 졸려"라는 값이 출력될 것이다. 하지만 HouseDog클래스에서도 sleep라는 메서드를 실행했을때 졸려가 아닌 집에서 졸고있다라는 값이 출력되도록 하려면 어떻게 해야할까?
class Animal {
String name;
void setName(String name){
this.name = name;
}
}
class Dog extends Animal { //Animal클래스를 상속한다.
void sleep() {
System.out.println(this.name + "졸려");
}
}
class HouseDog extends Dog {
void sleep() {
System.out.println(this.name + "집에서 졸고 있다.");
}
}
public class HelloWorld{
public static void main(String[] args) {
HouseDog houseDog = new HouseDog();
houseDog.setName("최다빈");
houseDog.sleep();
}
}

이렇게 Dog 클래스의 sleep메서드를 HouseDog클래스에서 똑같이 구현하여 원하는 값을 얻을 수 있다.
HouseDog클래스에 Dog클래스와 똑같은 sleep 메서드를 구현하면 HouseDog클래스에 sleep메서드가 더 우선순위를 얻어 HouseDog에 있는 sleep메서드가 실행된다.
이처럼 부모클래스에 있는 메서드를 자식클래스에 똑같이 구현하는 행위를 메서드 오버라이딩(메서드 덮어쓰기)이라고 한다.
4. 메서드 오버로딩
class Animal {
String name;
void setName(String name){
this.name = name;
}
}
class Dog extends Animal { //Animal클래스를 상속한다.
void sleep() {
System.out.println(this.name + "졸려");
}
}
class HouseDog extends Dog {
void sleep() {
System.out.println(this.name + "집에서 졸고 있다.");
}
void sleep(int hour) {
System.out.println(this.name + "은 집에서 졸고 있다." + hour + "시간동안");
}
}
public class HelloWorld{
public static void main(String[] args) {
HouseDog houseDog = new HouseDog();
houseDog.setName("최다빈");
houseDog.sleep();
houseDog.sleep(8);
}
}

HouseDog클래스에 같은 sleep 메서드이지만 입력 형태가 다른 메서드를 만들었다. 이렇게 입력형태가 다른 경우 동일한 이름의 메서드를 만들 수 있는데 이를 메서드 오버로딩이라고 칭한다.
5. 다중 상속
다중 상속은 클래스가 동시에 하나 이상의 클래스를 상속받는 것을 뜻한다. C++, 파이썬 등 많은 언어들이 다중 상속을 지원하지만 자바는 다중 상속을 지원하지 않는다.
'JAVA 기초공부' 카테고리의 다른 글
| JAVA - 콘솔 입출력 (1) | 2025.02.06 |
|---|---|
| JAVA - 생성자 (1) | 2025.02.05 |
| JAVA - 메서드 (0) | 2025.02.05 |
| JAVA - 클래스 (1) | 2025.02.04 |
| JAVA - 객체 지향 프로그래밍이란? (0) | 2025.02.04 |