자바 프로그래밍에서 상속과 오버로딩은 객체지향 프로그래밍의 핵심 개념 중 하나로, 코드의 재사용성과 유연성을 높이는 데 중요한 역할을 합니다. 상속은 is-a 관계를 표현하며, 기존 클래스의 특성과 기능을 새로운 클래스에게 물려줌으로써 코드의 중복을 최소화하고 확장성을 높입니다.
예를 들어, 동물 클래스가 있다면 이를 상속받는 사자, 닭, 돌고래 클래스는 동물의 공통된 특성과 기능을 재사용할 수 있습니다. 이렇게 상속을 통해 클래스를 작성하면, 코드를 처음부터 새롭게 작성할 필요 없이 기존 클래스의 일부를 재활용하여 새로운 클래스를 정의할 수 있습니다.
또한, 오버로딩은 같은 이름의 메서드나 생성자를 여러 개 정의하여 매개변수나 타입을 다르게 함으로써 다양한 입력에 대응할 수 있습니다. 이를 통해 한 개의 메서드나 생성자명으로 여러 가지 경우에 대응할 수 있으며 이는 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다.
관련 상속과 오버로딩 예시
class Animal {
// 동물 클래스의 공통된 특성과 기능
}
class Lion extends Animal {
// 사자 클래스, 동물 클래스를 상속받음
// 동물 클래스의 기능을 그대로 사용하거나 확장할 수 있음
}
class Bird {
// 새 클래스
// 오리, 닭 등의 클래스가 여기서 상속받을 수 있음
}
class Duck extends Bird {
// 오리 클래스, 새 클래스를 상속받음
// 새 클래스의 특성을 그대로 사용하거나 확장할 수 있음
}
class Calculator {
// 계산기 클래스
// 오버로딩된 메서드를 가질 수 있음
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Lion lion = new Lion();
Duck duck = new Duck();
Calculator calc = new Calculator();
int sumInt = calc.add(5, 10); // 정수 덧셈 메서드 호출
double sumDouble = calc.add(3.5, 2.7); // 실수 덧셈 메서드 호출
}
}
Animal클래스를 상속받은 Lion클래스와 Bird 클래스를 상속받은 Duck 클래스를 정의하고 있습니다. 또한, Calculator 클래스에서는 add메서드를 오버로딩하여 정수와 실수를 각각 더하는 메서드를 구현하고 있습니다.
코드에서는 안 보이겠지만 코드 첫줄에 super();가 항상 있다.
부모의 생성자를 호출하는 것이다.
super부모 클래스에 아무것도 안 받는 생성자를 쓰겠다는 이야기이다.
부모가 없으면 Object클래스를 받는다.
class A{
public A() {
}
}
class Test extends A{
public Test() {
//super(); //부모 생성자호출한다. 안적어도 자동으로
//default생성자든 매개변수 받는 생성자든
}
public int getTest() {
A a = new A();
return 0;
}
class A{
public A() {
}
public A(int a, int b) { //super로 여기서 전달받는다.
}
}
class Test extends A{
public Test() {
//super(); //부모 생성자호출한다. 안적어도 자동으로
//default생성자든 매개변수 받는 생성자든
super(0 ,0); //이런식으로 값을 전달해주고싶을때.부모한테 전달할때는super로만 생성자에선.
}
public int getTest() {
A a = new A();
return 0;
}
}
'코딩 > JAVA' 카테고리의 다른 글
Java 자바에서 DOM API로 XML 파싱하기: Document, Element, NodeList, 그리고 Node 인터페이스의 관계 (27) | 2024.03.06 |
---|---|
Java VSCode에서 게터세터(getter, setter) 쉽게 만들기 source action 자동생성 (22) | 2024.03.04 |
Java 객체지향 프로그래밍에서의 Getter와 Setter 활용: 데이터 관리의 핵심 (0) | 2024.02.06 |
JAVA 메서드(method)의 이해와 활용 (0) | 2024.02.05 |
Java 인텔리제이 디버깅 모드 사용하는 이유와 사용법 직접 사용해보자 (0) | 2024.02.01 |