Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 정적 메서드를 오버로드하거나 재정의할 수 있습니까?

<시간/>

Java의 정적 메소드는 오버로드될 수 있습니다. 하지만 두 메소드는 'static'이라는 키워드 때문에 서로 다른 두 메소드를 오버로딩할 수 없다는 조건이 있습니다.

예를 들어 보겠습니다 -

public class Demo{
   public static void test(){
      System.out.println("Demo class test function has been called");
   }
   public static void test(int val){
      System.out.println("Demo class test function with parameter has been called");
   }
   public static void main(String args[]){
      System.out.println("In the main class, Demo functions being called");
      Demo.test();
      Demo.test(57);
   }
}

출력

In the main class, Demo functions being called
Demo class test function has been called
Demo class test function with parameter has been called

Demo라는 클래스에는 특정 메시지를 출력하는 'test'라는 함수가 포함되어 있습니다. 또한 정수 값을 매개 변수로 사용하여 'test'라는 다른 함수를 정의합니다. 함수 본문 내부에 관련 메시지가 표시됩니다. 주 함수에서 테스트 함수는 매개변수 없이 정수 매개변수로 호출됩니다. 콘솔에 관련 메시지가 표시됩니다.

Java의 정적 메서드는 재정의할 수 없습니다. 동일한 서명을 가진 정적 메서드는 하위 클래스에서 정의할 수 있지만 런타임 다형성은 아닙니다. 따라서 재정의가 불가능합니다. 다음은 예입니다 -

class base_class{
   public static void show(){
      System.out.println("Static or class method from the base class");
   }
   public void print_it(){
      System.out.println("Non-static or an instance method from the base class");
   }
}
class derived_class extends base_class{
   public static void show(){
      System.out.println("Static or class method from the derived class");
   }
   public void print_it(){
      System.out.println("Non-static or an instance method from the derived class");
   }
}
public class Demo{
   public static void main(String args[]){
      base_class my_instance = new derived_class();
      System.out.println("Base class instance created.");
      my_instance.show();
      System.out.println("Function show called");
      my_instance.print_it();
      System.out.println("Function print_it called");
   }
}

출력

Base class instance created.
Static or class method from the base class
Function show called
Non-static or an instance method from the derived class
Function print_it called

기본 클래스에는 메시지를 인쇄하는 'show'라는 정적 함수가 있습니다. 마찬가지로 'print_it'이라는 또 다른 함수는 메시지를 표시합니다. 클래스는 두 함수를 상속하는 기본 클래스에서 파생됩니다. Demo라는 클래스에는 파생 유형 클래스인 기본 클래스의 인스턴스를 만드는 주 함수가 포함되어 있습니다. 관련 메시지가 콘솔에 표시됩니다.