JAVA 멀티태스킹 소개

6686 단어 JAVA다태
무엇이 다태입니까?
     
다태는 두 가지로 나뉜다.
(1) 컴파일 시 다태적(디자인 시 다태적): 방법 재부팅.
 
(2) 실행 시 다중 상태: JAVA 실행 시 시스템은 이 방법을 호출하는 실례의 유형에 따라 어떤 방법을 호출할지 선택하여 실행 시 다중 상태라고 부른다.(우리가 평소에 많이 말하는 일은 운행할 때 다태적이기 때문에 다태는 주로 운행할 때 다태를 가리킨다)
 
운행할 때 다태적으로 존재하는 세 가지 필수 조건: 첫째, 계승(인터페이스의 실현 포함)이 있어야 한다.2. 다시 써야 한다.3. 부모 클래스 인용은 하위 클래스 대상을 가리킨다.
 
--------------------------------------------------------------------------------
 
자세한 설명:
 
실행시 다태적 해석: a. 실행시 다태는 프로그램에서 정의한 인용 변수가 가리키는 구체적인 유형과 b를 가리킨다. 이 인용 변수를 통해 보내는 방법은 프로그래밍할 때 확정되지 않고 프로그램이 실행되는 동안에야 결정된다. 즉, 인용 변수가 도대체 어떤 종류의 실례 대상을 가리키는지, 이 인용 변수가 보내는 방법은 프로그램이 실행되는 동안에야 결정된다.
 
1. 프로그램 순서에 정의된 인용 변수가 가리키는 구체적인 유형은 확실하지 않다. 즉, 인용 변수가 어떤 종류의 실례 대상을 가리키는지. 
예:
driver 클래스 중 drive 방법(Vehicle 클래스 vehicle) {}
•oneDriver.drive( new car() )•oneDriver.drive (newbus () 중vehicle 변수는 어떤 하위 클래스를 사용할지 알 수 없습니다.
 
1. 이 인용 변수를 통해 보내는 방법은 프로그래밍할 때 확실하지 않다(이 인용 변수가 보내는 방법은 도대체 어떤 종류에서 이루어지는 방법인지). 
예: 요리사, 정원사, 이발사의 Cut 방법 사용.persion.cut().
 
--------------------------------------------------------------------------------
 
 
다태적 이점:
1. 교체 가능성(substitutability).다중 상태는 이미 존재하는 코드에 대해 대체성을 가지고 있다.예를 들어, 원형 Circle 클래스에 대한 다중 상태 작업, 원환과 같은 다른 원형 형상에 대해서도 마찬가지로 작업합니다.
2. 확장성(extensibility).다중 모드는 코드에 대해 확장성을 가지고 있다.새로운 하위 클래스를 추가하는 것은 이미 존재하는 클래스의 다태성, 계승성, 그리고 기타 특성의 운행과 조작에 영향을 주지 않는다.실제로 새로운 가자류는 다태적 기능을 얻기 쉽다.예를 들어 원추, 반원추와 반구체의 다태성을 실현한 토대에서 구체류의 다태성을 늘리기 쉽다.
3. 인터페이스성(interface-ability).다태는 초류가 방법을 통해 서명하고 자류에 공통된 인터페이스를 제공하여 자류로 보완하거나 덮어씌워서 이루어진 것이다.그림8.3 참조.그림에서 슈퍼 클래스 Shape는 두 가지 다중 모드를 실현하는 인터페이스 방법으로computeArea () 와computeVolume () 를 규정하고 있다.Circle과 Sphere 같은 하위 클래스는 다중 상태를 실현하기 위해 이 두 인터페이스 방법을 보완하거나 덮어씁니다.
4. 유연성(flexibility).그것은 응용에서 유연하고 다양한 조작을 구현하여 사용 효율을 높였다.
5. 단순성(simplicity).다태적으로 응용 소프트웨어에 대한 코드 작성과 수정 과정을 간소화하는데 특히 대량의 대상의 연산과 조작을 처리할 때 이 특징은 특히 두드러지고 중요하다.
 
 
실제 활용:
프로필의 사용과 결합하여 Spring 프레임워크에 연결하고 반사, 동적 호출 클래스를 이용하며 원본 코드를 수정하지 않고 새 클래스를 추가하고 프로필을 수정합니다. 서버를 다시 시작하지 않아도 프로그램을 확장할 수 있습니다.
 
--------------------------------------------------------------------------------
 
소결:
부류 유형의 인용을 사용하여 하위 클래스의 대상을 가리키며, 이 인용이 호출된 스승 클래스에 정의된 방법과 변수는 다시 쓸 수 없습니다(덮어쓰기).만약 하위 클래스에 부류 중의 방법을 다시 썼다면, 이 방법을 호출할 때, 하위 클래스의 이 방법을 호출할 것이다.
특수한 상황을 주의하십시오. 만약에 이 부류가 인용한 방법의 매개 변수 목록이 정의되지 않으면 이 부류의 부류에서 찾기를 호출하고, 아직 찾지 못하면 상기 유형으로 매개 변수 목록의 매개 변수 유형을 강제로 변환합니다. 구체적인 우선순위는 다음과 같습니다.
this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O).
 
--------------------------------------------------------------------------------
 
고전 필기시험 문제(재부팅 및 재부팅 혼합):
(1) 관련 클래스

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...{}
 
(2) 질문: 다음 출력 결과는 무엇입니까?
        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));     ⑨   
(3) 답안
              ①   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
(4) 분석
① ② ③ 이해하기 쉬우며 실수하지 않는다.④ ⑤ 헷갈리는데 왜 출력이 "B and B"가 아니죠?! 먼저 다태성을 살펴보겠습니다.
운행 시 다태성은 대상 프로그램 설계 코드를 대상으로 재사용하는 가장 강력한 메커니즘으로 동적 개념도'하나의 인터페이스, 여러 가지 방법'이라고 할 수 있다.Java가 실행될 때 다태성을 실현하는 기초는 동적 방법 스케줄링이다. 이것은 실행할 때 컴파일러에서 재부팅 방법을 사용하지 않는 메커니즘이다.
방법의 다시 쓰기Overriding과 다시 불러오기Overloading은 자바 다태성의 다른 표현이다.다시 쓰기Overriding은 부류와 자류 간의 다태적인 표현이고 다시 쓰기Overloading은 부류 중의 다태적인 표현이다.하위 클래스에 부모 클래스와 같은 이름과 파라미터를 정의하는 방법이 있다면, 이 방법은 다시 쓰기(Overriding)된다고 합니다.하위 클래스의 대상이 이 방법을 사용할 때 하위 클래스의 정의를 호출합니다. 하위 클래스의 정의는'차폐'된 것과 같습니다.한 클래스에 여러 개의 같은 이름의 방법이 정의되어 있거나 다른 매개 변수 개수가 있거나 다른 매개 변수 유형이 있다면 방법의 재부팅(Overloading)이라고 합니다.Overloaded의 방법은 되돌아오는 값의 형식을 바꿀 수 있지만 매개 변수 목록도 다르다.
초클래스 대상이 변수를 인용하여 하위 클래스 대상을 인용할 때 인용된 대상의 유형이 아니라 인용된 변수의 유형이 누구의 구성원을 호출하는 방법을 결정하지만, 이 호출된 방법은 반드시 초클래스에서 정의된 것이어야 한다. 즉, 이불류가 덮어쓰는 방법이다.(하지만 초클래스를 하위 클래스로 강제로 변환하면 하위 클래스에 새로 추가되었지만 초클래스가 없는 방법을 사용할 수 있습니다.)
자, 우선 여기까지 복습하고 본론으로 돌아가자!실제로 여기에는 방법 호출에 대한 우선 순위가 높고 낮음으로:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O).어떻게 작동하는지 봅시다.
예를 들어 ④, a2.show(b), a2는 인용 변수로 유형은 A,this는 a2,b는 B의 실례이다. 그래서 클래스 A에서 show(Bobj) 방법을 찾았지만 찾지 못했다. 그래서 A의 슈퍼(초클래스)를 찾았고 A는 초클래스가 없기 때문에 세 번째 우선순위this로 옮겼다.((super)O)O,this는 여전히 a2이다. 여기 O는 B,(super)O는(super)B는A이다. 그래서 클래스A에서 쇼(Aobj)를 찾는 방법이다. 클래스A는 이 방법이 있지만 a2는 클래스B의 한 대상을 인용하기 때문에 B는 A의show(Aobj)방법을 덮어씌운다. 이로 인해 최종적으로 클래스B의show(Aobj)에 잠겨'B and A'로 출력된다.
그리고 ⑧, b.show(c), b는 인용 변수이고 유형은 B,this는 b,c는 C의 실례이다. 그래서 클래스 B에 가서 show(C obj) 방법을 찾았지만 찾지 못하고 B의 초클래스 A로 옮겼다. A에도 없었다. 그래서 제3우선급this로 옮겼다.((슈퍼)O),this는 b,O는 C,(슈퍼)O는 B,(슈퍼)C는 B,그래서 B에서 쇼(Bobj) 방법을 찾았습니다. b는 클래스 B의 한 대상을 인용하기 때문에 클래스 B의 쇼(Bobj)에 직접 잠그고'B and B'로 출력합니다.
위의 방법에 따라 다른 결과를 정확하게 얻을 수 있다.
문제는 계속돼야 한다. 이제 위의 분석 과정이 어떻게 파란색 글씨체의 그 말의 내포를 나타냈는지 다시 보자.초클래스 대상이 변수를 인용하여 하위 클래스 대상을 인용할 때 인용된 대상의 유형이 아니라 인용된 대상의 유형이 누구의 구성원을 호출하는 방법을 결정하지만, 이 호출된 방법은 반드시 초클래스에서 정의된 것이어야 한다. 즉, 이불류를 덮어쓰는 방법이다.아니면 a2.show(b)말해봐.
a2는 인용 변수로 유형은 A이고 인용은 B의 대상이기 때문에 이 말은 B가 어떤 방법을 사용하는지 결정한다는 뜻이다.따라서 B의 show(B obj)를 호출하여'B and B'를 출력해야 합니다. 그런데 왜 앞의 분석에서 나온 결과와 일치하지 않습니까?! 문제는 파란색 글씨체의 뒷부분을 소홀히 하지 말아야 한다는 것입니다. 여기서 특히 이 호출된 방법은 초클래스에서 정의된 것이어야 합니다. 즉, 이불류로 덮는 방법입니다. B의 show(B obj)슈퍼 클래스 A에 정의가 있습니까?없어!그럼 덮어씌워진 건 더 말할 것도 없지.실제로 이 말은 메시지를 숨겼다. 그것은 여전히 방법에 따라 호출되는 우선순위에 따라 정해져 있다.이것은 클래스 A에서 쇼(A obj)를 찾았다. 만약에 하위 클래스 B가 쇼(A obj)를 덮어쓰는 방법이 없다면 A의 쇼(A obj)를 호출한다(B가 A를 계승하기 때문에 이 방법을 덮어쓰지 않았지만 슈퍼 클래스 A로부터 이 방법을 계승했다. 어떤 의미에서 보면 B가 호출하는 방법을 확정하는 것이지 방법은 A에서 이루어질 뿐이다).현재 하위 클래스 B는 show (A obj) 를 덮어쓰기 때문에 최종적으로 B의 show (A obj) 에 잠깁니다.이것이 바로 그 말의 의미이다.

좋은 웹페이지 즐겨찾기