산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

예제가 있는 Java OOP의 다형성:What is, Dynamic

자바에서 다형성이란 무엇입니까?

다형성 Java에서 상속에 의해 서로 관련된 하나 이상의 클래스 또는 객체가 있을 때 발생합니다. 여러 형태를 취할 수 있는 개체의 능력입니다. 상속을 통해 사용자는 속성과 메서드를 상속할 수 있으며 다형성은 이러한 메서드를 사용하여 다른 작업을 수행합니다. 그래서 목표는 소통이지만 접근 방식이 다릅니다.

예를 들어 통신용 스마트폰이 있습니다. 선택한 통신 모드는 무엇이든 될 수 있습니다. 전화, 문자, 사진, 메일 등이 될 수 있습니다. 그래서 목표는 소통이라는 공통점이 있지만 접근 방식이 다릅니다. 이것을 다형성이라고 합니다. 이제 예제를 통해 Java의 다형성을 배우겠습니다.

이 Java 자습서에서는 다음을 배우게 됩니다.




동영상에 액세스할 수 없는 경우 여기를 클릭하십시오.

예제가 있는 OOP의 Java 다형성

입출금 기능이 있는 '계정'이라는 부모 클래스가 있습니다. 계정에 2개의 하위 클래스가 있습니다.

입출금의 동작은 예금과 당좌예금과 동일합니다. 따라서 Account 클래스에서 상속된 메서드가 작동합니다.

<중앙>

<그림>

자바 다형성 예제

소프트웨어 요구 사항 변경

요구 사항 사양이 변경되었습니다. 이는 소프트웨어 업계에서 흔히 볼 수 있는 일입니다. 당좌 대월 기능이 있는 기능 권한 은행 계좌를 추가해야 합니다.

배경으로, 당좌 대월은 귀하의 계정에서 사용 가능한 잔액보다 많은 금액을 인출할 수 있는 기능입니다.

따라서 권한이 있는 철회 방법을 새로 구현해야 합니다. 그러나 당신은 저축 및 당좌 예금 계좌에서 테스트한 코드를 변경하지 않습니다. 이것이 OOPS의 장점입니다.

1단계) 계정을 저장하기 위한 "출금" 메소드가 호출되면 상위 계정 클래스의 메소드가 실행되도록 합니다.

2단계) 그러나 특권 계정에 대한 “Withdraw” 메소드(초과인출 기능)가 호출되면 특권 클래스에 정의된 인출 메소드가 실행됩니다. 이것은 OOP의 다형성입니다.

자바에서 메소드 재정의

메서드 재정의는 하위 클래스의 슈퍼 클래스 메서드를 재정의하는 것입니다.

메서드 재정의 규칙

class Doctor{
  public void treatPatient(){
  // treatPatient method
  
}
class Surgeon extends Doctor{
  public void treatPatient(){
  // treatPatient method
  }
}
Class run{
  public static void main (String args[]){
    Doctor doctorObj = new Doctor()
	// treatPatient method in class Doctor will be executed
    doctorObj.treatPatient();
   
    Surgeon surgeonObj = new Surgeon();
    // treatPatient  method in class Surgeon  will be executed
    surgeonObj.treatPatient();
  }
}

오버로딩과 오버라이드의 차이점

메서드 오버로딩

메서드 재정의
메서드 오버로딩은 동일한 클래스에 있으며 둘 이상의 메서드는 이름은 같지만 서명은 다릅니다. 메서드 재정의는 상위 클래스의 메서드 중 하나가 하위 클래스에서 재정의되는 경우입니다. 이 경우 메서드의 서명은 동일하게 유지됩니다.
예:

void sum (int a , int b);
void sum (int a , int b, int c);
void sum (float a, double b);
예:

class X{
  public int sum(){
     // some code
  }
}

class Y extends X{
  public int sum(){
    //overridden method
   //signature is same
 }
}

동적 다형성이란 무엇입니까?

OOP의 동적 다형성은 슈퍼클래스와 서브클래스에서 동일한 이름과 서명으로 여러 메서드를 정의할 수 있는 메커니즘입니다. 재정의된 메서드에 대한 호출은 런타임에 해결됩니다.

동적 다형성 예:

상위 클래스의 참조 변수는 하위 클래스 개체를 참조할 수 있습니다.

 Doctor obj = new Surgeon();

진술을 고려하십시오

obj.treatPatient();

여기에서 참조 변수 "obj"는 부모 클래스의 것이지만 가리키는 객체는 자식 클래스의 것입니다(아래 다이어그램 예제에서 다형성의 예와 같이).

obj.treatPatient()는 하위 클래스의 TreatPatient() 메서드를 실행합니다 – Surgeon

기본 클래스 참조가 메서드를 호출하는 데 사용되는 경우 호출할 메서드는 참조가 가리키는 개체에 따라 JVM에 의해 결정됩니다.

예를 들어 obj는 Doctor에 대한 참조이지만 Surgeon 개체를 가리키므로 Surgeon의 메서드를 호출합니다.

이는 런타임 중에 결정되므로 동적 이라고 합니다. 또는 런타임 다형성

정적 다형성과 동적 다형성의 차이점

Java의 Static Polymorphism은 컴파일 시에 메소드를 호출하기 위한 정보를 수집하는 다형성의 일종이고, Dynamic Polymorphism은 런타임에 메소드를 호출하기 위한 정보를 수집하는 다형성의 일종입니다.


정적 다형성

동적 다형성
메소드 오버로딩과 관련이 있습니다. 메서드 재정의와 관련이 있습니다.
오류가 있는 경우 컴파일 시 해결됩니다. 코드는 컴파일 중에 실행되지 않으므로 이름은 static입니다.

예:

void sum (int a , int b);
void sum (float a, double b);
int sum (int a, int b); //compiler gives error.

참조 변수가 재정의된 메서드를 호출하는 경우 호출할 메서드는 참조 변수가 가리키는 객체에 의해 결정됩니다. 이것은 코드가 실행 중일 때 런타임에만 결정할 수 있으므로 이름이 dynamic입니다.

예:

//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

자바의 슈퍼 키워드

Surgeon 클래스의 TreatPatient 메서드가 Doctor 클래스에 정의된 기능을 실행한 다음 고유한 특정 기능을 수행하려는 경우 어떻게 해야 합니까?

이 경우 키워드 super 자식 클래스에서 부모 클래스의 메서드에 액세스하는 데 사용할 수 있습니다.

Surgeon 클래스의 TreatPatient 메서드는 다음과 같이 작성할 수 있습니다.

treatPatient(){
   super.treatPatient();
     //add code specific to Surgeon
}

키워드 super는 하위 클래스에 있는 상위 클래스의 모든 데이터 멤버 또는 메서드에 액세스하는 데 사용할 수 있습니다.

다음으로 예제 프로그램을 통해 Java의 Super 키워드, 상속 및 다형성에 대해 알아보겠습니다.

예:-상속, 다형성 및 슈퍼 키워드 배우기

1단계) 다음 코드를 편집기에 복사

public class Test{
     public static void main(String args[]){
        X x= new X();
       Y y = new  Y();
       y.m2();
      //x.m1();
      //y.m1();
     //x = y;// parent pointing to object of child
     //x.m1() ;
     //y.a=10;
   }

}
class X{
   private int a;
   int b;
      public void m1(){
       System.out.println("This is method m1 of class X");
     }
}

class Y extends X{
      int c; // new instance variable of class Y
         public void m1(){
            // overriden method
            System.out.println("This is method m1 of class Y");
        }
       public void m2(){
           super.m1();
           System.out.println("This is method m2 of class Y");
      }
}

2단계) 코드를 저장, 컴파일 및 실행합니다. 출력을 관찰하십시오.

3단계) # 6-9 행의 주석을 제거합니다. 코드를 저장, 컴파일 및 실행합니다. 출력을 관찰하십시오.

4단계) 주석 제거 라인 # 10 . 코드를 저장하고 컴파일하세요.

5단계) 오류 =? 이는 하위 클래스가 상위 클래스의 private 멤버에 액세스할 수 없기 때문입니다.

요약


java

  1. 자바 다형성
  2. C# 추상 클래스 자습서 예제:추상화란?
  3. 예제가 있는 C#의 인터페이스란?
  4. Java의 String Length() 메서드:예제로 찾는 방법
  5. 예제가 있는 Java 문자열 charAt() 메서드
  6. Java 문자열 contains() 메소드 | 예제로 하위 문자열 확인
  7. 예제가 포함된 Java 문자열 endWith() 메서드
  8. Java의 정적 변수:정적 블록 및 메서드란 [예시]
  9. Java의 인터페이스 대 추상 클래스:차이점은 무엇입니까?
  10. Java BufferedReader:예제를 사용하여 Java에서 파일을 읽는 방법