[JAVA] 오버라이딩과 오버로딩 (Overriding, Overloading
오버라이딩 (Overriding)
오버라이딩이란, 상속 받은 클래스에서 상위 클래스의 메서드를 재정의하는 것을 말한다. 메서드 오버라이딩을 하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다.
public class OverridingPrac {
static int sum=0;
class A {
public void add () {
sum=sum+1;
}
}
class B extends A{
@Override
public int add () {
sum= sum=10;
}
}
public static void main (String[] args) {
A a = new A();
B b = new B();
a.add();
System.out.println(sum);
b.add();
System.out.println(sum);
}
}
/* 출력결과
1
11
*/
만약 여기서 객체 인스턴스를 생성하는 코드를 A a = new B();
로 바꾸면 어떤 클래스의 add
가 실행될까?
멤버 변수와 메서드는 선언한 클래스형에 따라 호출되니 A클래스의 add
가 호출될까?
상속에서 상위 클래스와 하위 클래스에 같은 이름의 메서드가 존재할 때 호출되는 메서드는 인스턴스에 따라 결정된다. 따라서 B클래스에 있는 add
가 호출된다.
이렇게 인스턴스의 메서드가 호출되는 기술을
가상메서드 (virtual method)
라고 한다.
오버로딩 (Overloading)
오버로딩이란 같은 메서드 이름을 사용하지만 매개변수의 개수나 자료형, 반환형을 다르게 정의하는 것을 말한다. 오버로딩은 주로 생성자를 만들 때 볼 수 있다.
public class name {
String firstName;
String middleName;
String lastName;
public name (String fn) {
this.firstName = fn;
}
public name (String fn, String ln) {
this.firstName = fn;
this.lastName = ln;
}
public name (String fn, String mn, String ln) {
this.firstName = fn;
this.middleName = mn;
this.lastName = ln;
}
}
위 예제에서 생성자(메서드)이름은 모두 name
으로 동일하지만 매개변수의 개수가 다르다.
자바 컴파일러는 사용자가 name
메서드를 호출하면 호출된 name
과 같은 매개변수 타입, 같은 매개변수 개수, 같은 반환형을 가지는 name
을 찾아 호출한다.
Author And Source
이 문제에 관하여([JAVA] 오버라이딩과 오버로딩 (Overriding, Overloading), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kekim20/JAVA-오버라이딩과-오버로딩-Overriding-Overloading저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)