자바 다형성의 유형-런타임 및 컴파일 시간 다형성

마지막 튜토리얼에서 우리는 자바의 다형성을 논의했다. 이 가이드에서 우리는 다형성의 유형을 볼 수 있습니다. 자바에는 두 가지 유형의 다형성이 있습니다:
1)정적 다형성 컴파일 타임 다형성
2)동적 다형성 런타임 다형성

컴파일 타임 다형성(또는 정적 다형성)

컴파일러 시간 동안 해결 된 다형성을 정적 다형성이라고합니다. 메서드 오버로딩은 컴파일 타임 다형성의 예입니다.
메소드 오버로드:메소드의 매개 변수가 번호,시퀀스 및 매개 변수의 데이터 유형이 다른 경우,우리는 같은 이름을 가진 하나 이상의 메소드를 가질 수 있습니다. 우리는 이미 여기에 메소드 오버로딩을 논의했다:당신이 그 가이드를 읽지 않은 경우,참조:자바

메소드 오버로딩 정적 다형성의 예

메소드 오버로딩은 자바가 정적 다형성을 지원하는 방법 중 하나입니다. 여기에서 우리는 컴파일 타임에 매개 변수 목록에 의해 결정된다 호출 될 추가 메소드 추가()의 두 가지 정의가 있습니다. 이것이 컴파일 타임 다형성이라고도 하는 이유입니다.

class SimpleCalculator{ int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; }}public class Demo{ public static void main(String args) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); }}

출력:

3060

런타임 다형성(또는 동적 다형성)

동적 메서드 디스패치라고도 합니다. 동적 다형성은 재정의 된 메서드에 대한 호출이 런타임에 확인되는 프로세스이며 런타임 다형성이라고 불리는 이유입니다. 나는 이미 별도의 튜토리얼에서 자세히 재정의 방법을 논의했다,그것을 참조:자바 메소드 재정의.

예제
이 예제에서는 두 개의 클래스가 있습니다. 이 클래스는 부모 클래스이며 자식 클래스입니다. 자식 클래스가 부모 클래스의 메서드 내 방법()을 재정의합니다. 이 예에서 우리는 호출 할 방법을 결정하기 위해,객체의 유형은 런타임에 결정 될 수 있도록 부모 클래스 참조에 할당 된 자식 클래스 개체가 있습니다. 참조 형식이 아닌 호출될 메서드의 버전을 결정하는 것은 개체 유형입니다.

재정의 개념을 이해하려면 자바에서 상속에 대한 기본 지식이 있어야합니다.

class ABC{ public void myMethod(){System.out.println("Overridden Method"); }}public class XYZ extends ABC{ public void myMethod(){System.out.println("Overriding Method"); } public static void main(String args){ABC obj = new XYZ();obj.myMethod(); }}

산출:

Overriding Method

재정의된 메서드가 부모 클래스의 참조를 통해 호출되면 개체의 형식이 실행될 메서드를 결정합니다. 따라서,이 결정은 런타임에 이루어진다.
클래스,자식 클래스와 부모 클래스 모두animalSound메소드가 동일하기 때문입니다. 어떤 버전의 메소드(자식 클래스 또는 부모 클래스)가 호출 될지는 런타임에 결정됩니다.

몇 가지 재정의 예제:

ABC obj = new ABC();obj.myMethod();// This would call the myMethod() of parent class ABCXYZ obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZABC obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZ

세 번째 경우에는 자식 클래스의 메서드가 실행될 수 있는데,그 이유는 어떤 메서드가 실행될 것인지는 객체의 유형에 따라 결정되고,객체가 자식 클래스에 속하기 때문에 자식 클래스 버전()이 호출되기 때문이다.

답글 남기기

이메일 주소는 공개되지 않습니다.

More: