오버라이딩과 오버로딩은 비슷한 이름으로 많이 헷갈릴 수 있다.
오버라이딩은 상위클래스에 있는 메소드를 하위클래스에서 재선언하면서 하위클래스에 메소드가 작동하도록 하는 것이고
오버로딩은 같은 이름의 메소드들을 선언하여 받는 값에따라 해당 메소드를 불러내는 것을 의미한다.
.
.
예제
class Aa
{
void rideMethod(){ System.out.println("Aa Method"); }
void loadMethod(){ System.out.println("void Method"); }
}
class Bb extends Aa
{
void rideMethod(){ System.out.println("Bb Method"); }
void loadMethod(int n){ System.out.println("int Method"); }
}
class Cc extends Bb
{
void rideMethod(){ System.out.println("Cc Method"); }
void loadMethod(double n){ System.out.println("double Method"); }
}
class RideAndLoad
{
public static void main(String[] args)
{
Aa ref1 = new Cc();
Bb ref2 = new Cc();
Cc ref3 = new Cc();
// 상위클래스형으로 인스턴스 선언 후 하위클래스로 생성 가능.
// 하위클래스의 인스턴스는 상위클래스의 인스턴스에 들어갈 수 있음
// 상위클래스형으로 선언한 인스턴스로는 상위클래스의 멤버에만 접근가능
// 단, 오버라이딩된 메소드의 경우 하위클래스의 메소드에 접근가능
// 오버라이딩된 메소드는 하위클래스의 메소드에 가려져야 하므로 사용가능
ref1.rideMethod(); // Cc Method
ref2.rideMethod(); // Cc Method
ref3.rideMethod(); // Cc Method
// 오버라이딩되었으므로 상위클래스형 인스턴스에서도 최하위클래스의 메소드 실행
ref1.loadMethod();
ref2.loadMethod();
ref3.loadMethod();
// 상속관계에서도 오버로딩이 가능하며, 마찬가지로 매개변수로 구분
}
}
.
.
오버로딩에 아무값도 안 넣을 때는 이런 결과가 나오게 된다.
하지만 값을 넣게 되면
.
.
class Aa
{
void rideMethod(){ System.out.println("Aa Method"); }
void loadMethod(){ System.out.println("void Method"); }
}
class Bb extends Aa
{
void rideMethod(){ System.out.println("Bb Method"); }
void loadMethod(int n){ System.out.println("int Method"); }
}
class Cc extends Bb
{
void rideMethod(){ System.out.println("Cc Method"); }
void loadMethod(double n){ System.out.println("double Method"); }
}
class RideAndLoad
{
public static void main(String[] args)
{
Aa ref1 = new Cc();
Bb ref2 = new Cc();
Cc ref3 = new Cc();
// 상위클래스형으로 인스턴스 선언 후 하위클래스로 생성 가능.
// 하위클래스의 인스턴스는 상위클래스의 인스턴스에 들어갈 수 있음
// 상위클래스형으로 선언한 인스턴스로는 상위클래스의 멤버에만 접근가능
// 단, 오버라이딩된 메소드의 경우 하위클래스의 메소드에 접근가능
// 오버라이딩된 메소드는 하위클래스의 메소드에 가려져야 하므로 사용가능
ref1.rideMethod(); // Cc Method
ref2.rideMethod(); // Cc Method
ref3.rideMethod(); // Cc Method
// 오버라이딩되었으므로 상위클래스형 인스턴스에서도 최하위클래스의 메소드 실행
ref1.loadMethod();
ref2.loadMethod(1);
ref3.loadMethod(1.2);
// 상속관계에서도 오버로딩이 가능하며, 마찬가지로 매개변수로 구분
}
}
.
.
오버로딩된 값은 다르게 나온다.
728x90
반응형
'Java > 본격 Java 상속' 카테고리의 다른 글
[Java] 실습 - 전화번호부 만들기 - 1 (0) | 2020.06.30 |
---|---|
[Java] InstanceOf 하위클래스 형변환 (0) | 2020.06.30 |
[Java] 오버라이딩(overriding) (0) | 2020.06.30 |
[Java] 상속 has-a관계 (0) | 2020.06.29 |
[Java] 상속 is-a관계 (0) | 2020.06.29 |