본문 바로가기

Java/본격 Java 상속

[Java] 오버라이딩(overriding)과 오버로딩(overloading)

오버라이딩과 오버로딩은 비슷한 이름으로 많이 헷갈릴 수 있다.

오버라이딩은 상위클래스에 있는 메소드를 하위클래스에서 재선언하면서 하위클래스에 메소드가 작동하도록 하는 것이고

오버로딩은 같은 이름의 메소드들을 선언하여 받는 값에따라 해당 메소드를 불러내는 것을 의미한다.

.

.

예제

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();
		// 상속관계에서도 오버로딩이 가능하며, 마찬가지로 매개변수로 구분
	}
}

.

.

오버라이딩과 오버로딩 차이점1

오버로딩에 아무값도 안 넣을 때는 이런 결과가 나오게 된다.

하지만 값을 넣게 되면

.

.

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);
		// 상속관계에서도 오버로딩이 가능하며, 마찬가지로 매개변수로 구분
	}
}

.

.

오버라이딩과 오버로딩의 차이점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