>Java >java지도 시간 >Java의 가상 함수

Java의 가상 함수

王林
王林원래의
2024-08-30 15:35:01542검색

객체 지향 프로그래밍 언어인 Java는 상속, 다형성, 업캐스팅 등과 같은 기능을 지원합니다. 따라서 Java의 OOP는 객체, 클래스 및 함수를 다룹니다. 가상 함수는 Java에서 런타임 다형성을 용이하게 하는 멤버 함수 중 하나입니다. 이 기사에서는 Java의 가상 함수에 대해 설명합니다.

정의: 가상 함수는 특별한 함수는 아니지만 메서드 재정의 메커니즘을 용이하게 하는 멤버 함수입니다. 즉, OOP에서 상위 클래스의 가상 함수는 유형은 동일하지만 기능이 다른 하위 클래스에 의해 재정의될 수 있는 함수입니다.

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문: Java의 가상 함수의 경우 주석이 포함된 Java의 기본 구문을 따라야 합니다. 가상 기능에 대한 재정의 메커니즘을 구현하려면 여기에서 @Override 주석을 사용하여 재정의하려는 가상 기능을 구체적으로 지적할 수 있지만 필수는 아닙니다.

Java에서 가상 함수는 어떻게 작동하나요?

이제 가상 기능이 어떻게 작동하는지 살펴보겠습니다. 부모 유형 참조를 통해 자식 클래스의 재정의된 메서드를 호출할 때 개체의 유형이나 참조는 호출될 메서드를 나타냅니다. 이 결정의 결론은 컴파일 후 런타임 중에 발생합니다. 따라서 가상 함수의 기능은 동일한 유형의 상속된 하위 클래스에 의해 재정의됩니다.

가상 함수 관련 몇 가지 사항:

  • 하위 클래스와 상위 클래스의 함수는 이름과 매개변수가 동일해야 합니다.
  • IS-A관계는 필수(상속)입니다.
  • 상위 클래스의 비공개 메서드를 재정의할 수 없으므로 가상 함수는 비공개일 수 없습니다.
  • 가상 함수는 Final 메서드를 재정의할 수 없으므로 Final로 명시할 수 없습니다.
  • 가상 함수는 정적 메서드를 재정의할 수 없으므로 정적이라고 명시할 수 없습니다.

Java의 가상 함수 예시

여기서 가상 함수의 몇 가지 코드 예제를 논의하겠습니다.

예시 #1

이 예에서는 가상 함수 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
}
}

출력:

Java의 가상 함수

예시 #2

다단계 상속의 경우 가상 함수의 예를 들어보겠습니다. 이 예에서는 두 가지 수준의 상속이 고려됩니다. 이 예에서는 가상 함수 관리()가 연결된 개체 유형에 따라 서로 다른 메시지를 표시하는 방법을 보여줍니다. "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
}
}

출력:

Java의 가상 함수

예시 #3

다단계 상속의 경우 런타임 다형성의 또 다른 예를 들어보겠습니다. 이 예에서는 세 가지 수준의 상속이 고려됩니다. 이 예에서는 가상 함수 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 컴파일러에서 직접 작성하고 출력을 확인하십시오. 코드를 직접 작성하지 않으면 코드 학습이 불완전합니다.

위 내용은 Java의 가상 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.