객체 지향 프로그래밍 언어인 Java는 상속, 다형성, 업캐스팅 등과 같은 기능을 지원합니다. 따라서 Java의 OOP는 객체, 클래스 및 함수를 다룹니다. 가상 함수는 Java에서 런타임 다형성을 용이하게 하는 멤버 함수 중 하나입니다. 이 기사에서는 Java의 가상 함수에 대해 설명합니다.
정의:가상 함수는 특별한 함수는 아니지만 메서드 재정의 메커니즘을 용이하게 하는 멤버 함수입니다. 즉, OOP에서 상위 클래스의 가상 함수는 유형은 동일하지만 기능이 다른 하위 클래스에 의해 재정의될 수 있는 함수입니다.
광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
구문:Java의 가상 함수의 경우 주석이 포함된 Java의 기본 구문을 따라야 합니다. 가상 기능에 대한 재정의 메커니즘을 구현하려면 여기에서 @Override 주석을 사용하여 재정의하려는 가상 기능을 구체적으로 지적할 수 있지만 필수는 아닙니다.
이제 가상 기능이 어떻게 작동하는지 살펴보겠습니다. 부모 유형 참조를 통해 자식 클래스의 재정의된 메서드를 호출할 때 개체의 유형이나 참조는 호출될 메서드를 나타냅니다. 이 결정의 결론은 컴파일 후 런타임 중에 발생합니다. 따라서 가상 함수의 기능은 동일한 유형의 상속된 하위 클래스에 의해 재정의됩니다.
가상 함수 관련 몇 가지 사항:
여기서 가상 함수의 몇 가지 코드 예제를 논의하겠습니다.
이 예에서는 가상 함수 showMe()가 연결된 개체의 참조에 따라 어떻게 다른 텍스트를 표시하는지 보여줍니다. "Head" 유형과 연관되면 상위 클래스의 메시지를 표시합니다. "Subordinate" 유형과 연계되면 하위 클래스의 메시지를 보여줍니다.
코드:
class Head { public void showMe() { System.out.println("I am Head"); } } class Subordinate extends Head { @Override public void showMe() { System.out.println("I am Subordinate "); } } public class VirtualFuntionDemo { public static void main(String args[]) { Head superObject = new Head(); superObject.showMe(); //method of super class or parent class is called Head subObject = new Subordinate(); // upcasting subObject.showMe();//method of sub class or child class is called by Parent reference, this is called "Virtual function" Subordinate subObject2 = new Subordinate(); subObject2.showMe(); //method of sub class or child class is called } }
출력:
다단계 상속의 경우 가상 함수의 예를 들어보겠습니다. 이 예에서는 두 가지 수준의 상속이 고려됩니다. 이 예에서는 가상 함수 관리()가 연결된 개체 유형에 따라 서로 다른 메시지를 표시하는 방법을 보여줍니다. "State" 유형과 연결되면 상위 클래스의 메시지가 표시됩니다. "District" 유형과 연관되면 해당 하위 클래스의 메시지를 표시합니다. 다시 두 번째 상속 수준에서 "Municipality" 유형과 연결되면 상위 클래스의 하위 클래스인 "District" 클래스의 메시지를 표시합니다.
코드:
class State{ void administartion() { System.out.println("This is under state govt."); } } class District extends State{ void administartion(){ System.out.println("This is under District Magistrate"); } } class Municipality extends District{ void administartion(){ System.out.println("This is under Mayor "); } } public class VirtualFunctionDemo2 { public static void main(String args[]){ State superObject=new State (); State subObject=new District (); State sub2Object=new Municipality (); superObject. administartion (); subObject.administartion (); // run time polymorphism occurs in virtual function happening in first level of heritance sub2Object.administartion (); // run time polymorphism occurs in virtual function happening in 2nd level of heritance } }
출력:
다단계 상속의 경우 런타임 다형성의 또 다른 예를 들어보겠습니다. 이 예에서는 세 가지 수준의 상속이 고려됩니다. 이 예에서는 가상 함수 whoami()가 연결된 개체 유형에 따라 어떻게 다른 기능을 표시하는지 보여줍니다. "Cars" 유형과 연결되면 상위 클래스의 메시지가 표시됩니다. "SUV" 유형과 연관되면 해당 하위 클래스의 메시지를 표시합니다. 다시 두 번째 상속 수준에서 "MPV" 유형과 연결되면 상위 클래스인 "SUV" 클래스의 하위 클래스에서 보낸 메시지를 표시합니다. 세 번째 상속 수준에서는 "Hatchback" 유형과 연결될 때 상위 클래스의 하위 클래스인 "MPV" 클래스의 메시지를 표시합니다.
코드:
class Cars{ void whoami() { System.out.println("This is Car"); } } class SUV extends Cars{ void whoami(){ System.out.println("This is SUV"); } } class MPV extends SUV{ void whoami(){ System.out.println("This is MPV"); } } class Hatchback extends MPV{ void whoami(){ System.out.println("This is hatchback"); } } public class VirtualFunctionDemo3 { public static void main(String args[]){ Cars superObject=new Cars(); Cars subObject=new SUV(); // object of child type : 1st level heritance Cars sub2Object=new MPV(); // object of child type : 2nd level heritance Cars sub3Object=new Hatchback(); // object of child type : 3rd level heritance superObject.whoami(); subObject.whoami(); //run time polymorphism occurs in virtual function happening in first level of heritance sub2Object.whoami(); //run time polymorphism occurs in virtual function happening in second level of heritance sub3Object.whoami(); //run time polymorphism occurs in virtual function happening in third level of heritance } }
출력:
이것으로 "Java의 가상 함수" 주제에 대한 학습을 마칩니다. 위의 예제에서 언급된 코드를 Java 컴파일러에서 직접 작성하고 출력을 확인하십시오. 코드를 직접 작성하지 않으면 코드 학습이 불완전합니다.
위 내용은 Java의 가상 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!