"동적"은 "실행 시간"을 의미하고 "바인딩"은 "연결"을 의미합니다. 따라서 동적 바인딩이라는 용어는 Java 가상 머신에 의한 객체의 런타임 연관을 나타냅니다. 여기에서는 Java가 런타임에 동적 바인딩을 달성하는 방법, 즉 코드가 최종 실행되기 전과 컴파일 후에 어떻게 작동하는지 살펴보겠습니다.
구문: Java의 동적 바인딩의 경우 주석이 포함된 Java의 기본 구문을 따라야 합니다. 여기에서 @Override 주석을 사용하여 구체적으로 재정의하려는 메서드를 지정할 수 있습니다.
광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사런타임 다형성은 Java에서 메서드 재정의를 통해 작동합니다. 메소드 재정의는 객체가 상위 클래스와 동일한 메소드 이름, 인수 및 유형을 가지지만 기능이 다른 경우에 발생합니다. 하위 클래스에 해당 유형의 메소드가 있는 경우 이를 재정의된 메소드라고 부릅니다.
그렇게 명명된 이유는 메소드의 기능이 JVM의 객체에 따라 런타임에 동적으로 결정되기 때문입니다. "런타임 다형성"이라고도 합니다. 상위 유형 참조를 통해 하위 클래스의 재정의된 메소드를 호출할 때(Java에서 이 현상을 "업캐스팅"이라고 함) 객체의 유형은 호출될 메소드나 기능을 나타냅니다. 이 결정은 코드 컴파일 후 JVM의 런타임 중에 발생합니다. 따라서 이를 런타임 다형성이라고 합니다. 메소드와 객체의 바인딩, 즉 객체의 메소드가 표시될 기능을 의미하는 바인딩이 컴파일 후에 늦게 결정되기 때문에 "레이트 바인딩"이라고도 합니다.
동적 바인딩 관련 규칙
동적 바인딩의 한계
여기서 동적 바인딩의 몇 가지 코드 예를 논의하겠습니다.
이 예에서는 Loccate() 메소드가 연관된 객체 유형에 따라 어떻게 다른 메시지를 표시하는지 보여줍니다. "Continent" 유형과 연결되면 상위 클래스의 메시지가 표시됩니다. "SubContinent" 유형과 연관되면 하위 클래스의 메시지를 표시합니다.
코드:
class Continent { public void locate () { System.out.println("We are in Continent"); } } class SubContinent extends Continent { @Override public void locate () { System.out.println("We are in SubContinent"); } } public class DynamicBinding { public static void main(String args[]) { Continent superObject = new Continent (); superObject.locate(); //method of super class or parent class is called SubContinent subObject = new SubContinent (); // upcasting subObject.locate();//method of sub class or child class is called by Parent reference, this is called "Dynamic Binding" SubContinent subObject2 = new SubContinent (); subObject2.locate(); //method of sub class or child class is called } }
출력:
다단계 상속의 경우 동적 바인딩의 예를 들어보겠습니다. 이 예에서는 두 가지 수준의 상속이 고려됩니다. 이 예에서는 식별() 메서드가 연결된 개체 유형에 따라 다른 메시지를 표시하는 방법을 보여줍니다. "컴퓨터" 유형과 연결되면 상위 클래스의 메시지가 표시됩니다. "Desktop" 유형과 연결되면 하위 클래스의 메시지가 표시됩니다. 다시 두 번째 상속 수준에서 "Laptop" 유형과 연결되면 상위 클래스의 하위 클래스인 "Desktop" 클래스의 메시지를 표시합니다.
코드:
class Computer { void identify() { System.out.println("This is Computer"); } } class Desktop extends Computer { void identify (){ System.out.println("This is Desktop"); } } class Laptop extends Desktop { void identify (){ System.out.println("This is Laptop"); } } public class DynamicBinding { public static void main(String args[]){ Computer superObject=new Computer (); Computer subObject=new Desktop (); // // upcasting : first level of heritance Computer babyObject=new Laptop (); // // upcasting : second level of heritance superObject.identify (); subObject.identify (); //run time polymorphism happening in first level of heritance babyObject.identify (); //run time polymorphism happening in second level of heritance } }
출력:
다중 상속의 경우 런타임 다형성의 또 다른 예를 들어 보겠습니다. 이 예에서는 세 가지 수준의 상속이 고려됩니다. 이 예에서는 feature() 메서드가 연결된 개체 유형에 따라 다양한 기능을 표시하는 방법을 보여줍니다. "Cosmetics" 유형과 연결되면 상위 클래스의 메시지가 표시됩니다. "Perfume" 유형과 연관되면 해당 하위 클래스의 메시지를 표시합니다. 다시 상속의 두 번째 수준에서 "Deo" 유형과 연결되면 상위 클래스인 "Perfume" 클래스의 하위 클래스로부터 메시지를 표시합니다. 다시 상속의 세 번째 수준에서 "DeoStick" 유형과 연결되면 상위 클래스인 "Deo" 클래스의 하위 클래스로부터 메시지를 표시합니다.
코드:
class Cosmetics{ void feature() { System.out.println("Cosmetics are expensive"); } } class Perfume extends Cosmetics { void feature(){ System.out.println("Perfume is soothing"); } } class Deo extends Cosmetics { void feature(){ System.out.println("Deo is sometimes better than perfume"); } } class DeoStick extends Deo{ void feature(){ System.out.println("DeoStick is very handy"); } } public class RunTimePolymorphism { public static void main(String args[]){ Cosmetics superObject=new Cosmetics (); Cosmetics subObject=new Perfume(); // child object type : first level of heritance Cosmetics sub2Object=new Deo(); // child object type : second level of heritance Cosmetics sub3Object=new DeoStick(); // child object type : third level of heritance superObject.feature(); subObject.feature(); //run time polymorphism happening in first level of heritance sub2Object.feature(); //run time polymorphism happening in second level of heritance sub3Object.feature(); //run time polymorphism happening in third level of heritance } }
출력:
이것으로 "Java의 동적 바인딩" 주제에 대한 학습을 마칩니다. 위의 예제에서 언급된 코드를 Java 컴파일러에서 직접 작성하고 출력을 확인하십시오. 코드를 직접 작성하지 않으면 코드 학습이 불완전합니다.
위 내용은 Java의 동적 바인딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!