[JAVA]상속과 메소드 오버라이딩, 오버로딩?
inheritance?
상속이란 객체 지향 프로그래밍의 중요한 특징중 하나입니다. 상속은 무엇인가를 물려받는다는 의미로, 부모가 자식에게 물려주는 재산과 비슷한 의미로 쓰입니디. 부모에게 재산을 상속받으면 상속받은 재산을 자신의 것으로 사용할 수 있습니다. 자바에서도 마찬가지로 자식 클래스가 부모 클래스를 상속 받으면 자식 클래스는 부모 믈래스의 멤버변수와 메소드를 사용할 수 있습니다. 객체 지향 프로그램은 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연한데, 그 기반이 되는 기술이 바로 상속입니다.
extends?
자바 문법으로 상속을 구현하기 위해서는 extends 예약어를 사용합니다. 아래의 코드와 같이 사용할 수 있습니다.
public class Dog extends Animal {
}
super?
super 예약어는 하위 클래스에서 상위 클래스로 접근할 때 사용합니다. 하위 클래스는 상위 클래스의 주소, 즉 참조 값을 알고 있습니다. 이 참조 값을 가지고 있는 예약어가 super 입니다.
public class Animal {
public Animal(String name, int age) {
this.name = "happy";
this.age = 3;
}
}
public class Dog extends Animal {
super(name, age);
super.name = "kevin";
상위 클래스에 선언한 멤버변수나 메소드를 하위 클래스에서 참조할 때도 super를 사용합니다. this를 사용하여 자신의 멤버에 접근하는 것과 비슷합니다. 아래 내용에서 나오겠지만 부모 클래스와 자식 클래스에서 동일한 이름의 메소드나 변수를 구현하는 경우가 생기는데, super 예약어로 상위 클래스 메소드를 가르킬 수 있습니다.
method overriding?
상위 클래스에서 정의한 메소드가 하위 클래스에서 구현할 내용과 맞지 않을 경우 하위 클래스에서 메소드를 재 정의 할 수 있습니다. 이를 메소드 오버라이딩이라고 합니다. 오버 라이딩을 하려면 반환형, 메소드 이름, 매개변수 개수, 매개 변수 자료형이 반드시 같아야 합니다. 그렇지 않으면 자바 컴파일러는 재 정의한 메소드를 기존 메소드와 다른 메소드로 인식 합니다.
public class Animal {
public void speak() {
System.out.println("울음소리");
}
}
public class Dog extends Animal {
public void speak() {
System.out.println("멍멍");
}
}
method overloading?
메소드 오버로딩은 메소드 오버로딩과 생성자 오버로딩이 있습니다. 둘은 같은 개념으로 생각하시면 됩니다. 같은 이름의 메소드를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 같은 메소드 명이라 할지라도, 같은 인자의 메소드를 호출하는 것입니다. 아래의 예제를 참고합니다.
public class OverloadingTest {
int Volume;
String Channel;
void print(int num){
Volume = num;
System.out.println(Volume);
void print(String ch){
Channel = ch;
System.out.println(Channel);
위 예제와 같이 동일한 메소드 명이지만, 인자로 전달받은 자료형에 따라 다른 결과를 보여주게 됩니다. 자주 사용하는 println도 메소드 오버로딩이라고 할 수 있습니다.
이렇게 Java의 상속, 메소드 오버라이딩, 메소드 오버로딩에 대해 포스팅 하였습니다. 잘못된 정보나 피드백은 댓글 부탁 드립니다!😃
댓글남기기