English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

java 다형성 자세히 설명 및 간단한 예제

Java에서 다중 상태성의 구현

다중 상태는 무엇인가요

  1. 객체 지향의 세 가지 주요 특성: 포장, 상속, 다중 상태. 일정한 관점에서, 포장 및 상속은 대체로 다중 상태를 위해 준비되었습니다. 이는 우리의 마지막 개념이며, 가장 중요한 지식입니다.
  2. 다중 상태의 정의: 다른 클래스의 객체가 동일한 메시지에 응답할 수 있음을 의미합니다. 즉, 동일한 메시지는 전송하는 객체에 따라 여러 가지 다른 행동 방식을 취할 수 있습니다.(메시지 전송은 함수 호출입니다)
  3. 다중 상태를 구현하는 기술은 동적 바인딩(dynamic binding)으로, 실행 중에 참조하는 객체의 실제 타입을 판단하고, 실제 타입에 따라 해당 메서드를 호출하는 것입니다.
  4. 다중 상태의 역할: 타입 간의 결합 관계를 제거합니다.
  5. 현실에서, 다중 상태에 대한 예제는 수두룩합니다. 예를 들어, F1 키 동작이, 현재 Flash 인터페이스에서 표시되면 AS 3 의 도움말 문서;현재 Word에서 표시되면 Word 도움말이고, Windows에서 표시되면 Windows 도움말 및 지원이 됩니다. 동일한 이벤트가 다른 객체에 발생하면 다른 결과가 발생합니다.

다중 상태가 존재하는 세 가지 필수 조건은 다음과 같습니다. 꿈을 꾸는 동안도 기억할 수 있도록 요청드립니다!

다중 상태가 존재하는 세 가지 필수 조건

1. 상속이 필요합니다;
2. 재정의가 필요합니다;
3. 부모 클래스 참조가 서브 클래스 객체를 가리킵니다.

 다중 상태의 장점:

1. 대체성(substitutability)。다중 상태는 기존 코드에 대체성을 가지고 있습니다. 예를 들어, 다중 상태는 원 Circle 클래스에 작동하며, 원형의 다른 모든 기하학적 객체, 예를 들어 원环도 마찬가지로 작동합니다.

2. 확장성(extensibility)。다중 상태는 코드에 확장성을 가지고 있습니다. 새로운 서브 클래스를 추가하면 기존 클래스의 다중 상태, 상속성, 그리고 다른 특성의 실행 및 작업에 영향을 미치지 않습니다. 실제로 새로운 서브 클래스는 다중 상태 기능을 더 쉽게 얻을 수 있습니다. 예를 들어, 콘vek, 반콘vek 및 반구체의 다중 상태 기반에서 구체 클래스의 다중 상태를 쉽게 추가할 수 있습니다.

3. 인터페이스성(interface-ability)。다중 상태는 super 클래스가 메서드 서명을 통해 서브 클래스에 공통 인터페이스를 제공하고, 서브 클래스가 그것을 완성하거나 덮어쓰면서 구현됩니다. 그림에서 보면8.3 이렇게 표시되었습니다. 그림에서 super 클래스 Shape는 다중 상태를 구현하기 위해 두 개의 인터페이스 메서드를 정의했습니다. computeArea() 및 computeVolume(). Circle 및 Sphere와 같은 서브 클래스는 다중 상태를 구현하기 위해 이 두 개의 인터페이스 메서드를 완성하거나 덮어씁니다.

4. 유연성(flexibility)。그것은 응용 프로그램에서 다양한 작업을 반영하며, 사용 효율성을 높입니다.

5. 간소화성(simplicity)。다중 상태는 응용 소프트웨어의 코드 작성 및 수정 과정을 간소화하고, 특히 많은 객체의 계산 및 작업을 처리할 때 이 특징이 특히 돋보이고 중요합니다.

Java에서 다중 상태의 구현 방법: 인터페이스 구현, 부모 클래스를 상속하여 메서드 재정의, 동일한 클래스 내에서 메서드 오버로드.

一个小题目:

(一)相关类

class A ...{ 
     public String show(D obj)...{ 
        return ("A and D"); 
     }  
     public String show(A obj)...{ 
        return ("A and A"); 
     }  
}  
class B extends A...{ 
     public String show(B obj)...{ 
        return ("B and B"); 
     } 
     public String show(A obj)...{ 
        return ("B and A"); 
     }  
} 
class C extends B...{}  
class D extends B...{} 

(이)문제: 다음 출력 결과는 무엇인가요?

A a1 = new A(); 
    A a2 = new B(); 
    B b = new B(); 
    C c = new C();  
    D d = new D();  
    System.out.println(a1.show(b));  ① 
    System.out.println(a1.show(c));  ② 
    System.out.println(a1.show(d));  ③ 
    System.out.println(a2.show(b));  ④ 
    System.out.println(a2.show(c));  ⑤ 
    System.out.println(a2.show(d));  ⑥ 
    System.out.println(b.show(b));  ⑦ 
    System.out.println(b.show(c));  ⑧ 
    System.out.println(b.show(d));  ⑨   

(三)답변

①  A and A
②  A and A
③  A and D
④  B and A
⑤  B and A
⑥  A and D
⑦  B and B
⑧  B and B
⑨  A and D

읽어주셔서 감사합니다. 많은 도움이 되길 바랍니다. 많은 분들께서 이 사이트에 대한 지원에 감사합니다!

좋아하는 것