java 다태적 상해 및 흔한 면접 문제

4887 단어 java다태성
java 다태성
다태는 두 가지로 나뉜다.
(1) 컴파일 시 다태적(디자인 시 다태적): 방법 재부팅.
(2) 실행 시 다중 상태: JAVA 실행 시 시스템은 이 방법을 호출하는 실례의 유형에 따라 어떤 방법을 호출할지 선택하여 실행 시 다중 상태라고 부른다.(우리가 평소에 많이 말하는 일은 운행할 때 다태적이기 때문에 다태는 주로 운행할 때 다태를 가리킨다)
실행 시 다중 상태의 세 가지 필수 조건:
1. 계승이 있어야 한다(인터페이스의 실현 포함).
2. 다시 써야 한다.
3. 부모 클래스 인용은 하위 클래스 대상을 가리킨다.
다태적 이점:
1. 교체 가능성(substitutability).다중 상태는 이미 존재하는 코드에 대해 대체성을 가지고 있다.예를 들어, 원형 Circle 클래스에 대한 다중 상태 작업, 원환과 같은 다른 원형 형상에 대해서도 마찬가지로 작업합니다.
2. 확장성(extensibility).다중 모드는 코드에 대해 확장성을 가지고 있다.새로운 하위 클래스를 추가하는 것은 이미 존재하는 클래스의 다태성, 계승성, 그리고 기타 특성의 운행과 조작에 영향을 주지 않는다.실제로 새로운 가자류는 다태적 기능을 얻기 쉽다.예를 들어 원추, 반원추와 반구체의 다태성을 실현한 토대에서 구체류의 다태성을 늘리기 쉽다.
3. 인터페이스성(interface-ability).다태는 초류가 방법을 통해 서명하고 자류에 공통된 인터페이스를 제공하여 자류로 보완하거나 덮어씌워서 이루어진 것이다.그림8.3 참조.그림에서 슈퍼 클래스 Shape는 두 가지 다중 모드를 실현하는 인터페이스 방법으로computeArea () 와computeVolume () 를 규정하고 있다.Circle과 Sphere 같은 하위 클래스는 다중 상태를 실현하기 위해 이 두 인터페이스 방법을 보완하거나 덮어씁니다.
4. 유연성(flexibility).그것은 응용에서 유연하고 다양한 조작을 구현하여 사용 효율을 높였다.
5. 단순성(simplicity).다태적으로 응용 소프트웨어에 대한 코드 작성과 수정 과정을 간소화하는데 특히 대량의 대상의 연산과 조작을 처리할 때 이 특징은 특히 두드러지고 중요하다.
주의: 우선 순위는 높음에서 낮음으로:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O).
관련 면접 문제:

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
분석:
이런 문제를 풀면 항상 그 우선순위 순서를 사용해야 한다.
첫 번째 문제:
a1은 A류의 실례화된 대상이므로this는 A를 가리키고this를 찾습니다.show(b), 이 방법이 없기 때문에super에 도착합니다.show(b), 하지만 A클래스는 클래스를 초과하지 않았기 때문에this.show(superb), b의 초류는 A이기 때문에this에 해당한다.show(A), 그리고 A클래스에서 이 방법을 찾았습니다. 그래서 A and A를 출력합니다.
두 번째 문제:
마찬가지로 a1은 A류의 실례화된 대상이기 때문에this는 A를 가리키고 A류에서this를 찾습니다.show(C)방법, 이 방법이 없어서 슈퍼에 왔습니다.show(C), A류의 초클래스 안에서 찾았지만 A류는 초클래스가 없어this에 도착했습니다.show(super C), C의 초클래스가 B이기 때문에 A클래스에서this를 찾습니다.show(B) 방법도 찾지 못했고 B도 초클래스가 있습니다. 바로 A입니다. 그래서this를 찾습니다.show(A), 찾았습니다. 그래서 A and A를 출력합니다.
세 번째 문제:
마찬가지로 a1은 A류의 실례화 대상이기 때문에this는 A를 가리키고 A류에서this를 찾는다.show(D) 방법, 찾았으니 A and D 출력하기;
네 번째 문제:
a2는 B류의 인용 대상이고 유형은 A이기 때문에this는 A류를 가리키고 A류 안에서this를 찾는다.show(B) 방법, 못 찾았어요. 그래서 슈퍼에 왔어요.show(B), A클래스에 클래스가 없기 때문에this에 도착했습니다.show(super B), B의 초클래스는 A, 즉 super B=A이기 때문에 실행 방법this.show(A), A 방법에서 show(A)를 찾아 찾았지만 a2는 클래스 B의 인용 대상이고 B 클래스 안에 A 클래스의 show(A) 방법이 덮여 있기 때문에 최종적으로 실행된 것은 B 클래스 안의 show(A) 방법, 즉 출력 B and A이다.
다섯 번째 문제:
a2는 B류의 인용 대상이고 유형은 A이기 때문에this는 A류를 가리키고 A류 안에서this를 찾는다.show(C) 방법, 못 찾았어요. 그래서 슈퍼에 왔어요.show(C) 방법, A클래스에 클래스가 없기 때문에this에 도착했습니다.show(super C), C의 초클래스는 B이기 때문에 A클래스에서 show(B)를 찾았는데 똑같이 찾지 못했다. B에 초클래스, 즉 A가 있는 것을 발견했기 때문에 A클래스에서 show(A) 방법을 계속 찾아서 찾았다. 그러나 a2는 하나의 클래스 B의 인용 대상이고 B클래스 안에 A클래스의 show(A) 방법이 덮여 있기 때문에 최종적으로 실행된 것은 B클래스 안의 show(A) 방법, 즉 출력 B and A이다.
여섯 번째 문제:
a2는 B류의 인용 대상이고 유형은 A이기 때문에this는 A류를 가리키고 A류 안에서this를 찾는다.show(D) 방법, 찾았지만 a2는 클래스 B의 인용 대상이기 때문에 B클래스에서 show(D) 방법을 덮어쓰는지 찾습니다. 없습니다. 그래서 실행하는 것은 A클래스 안의 show(D) 방법, 즉 출력 A and D입니다.
일곱 번째 문제:
b는 B류의 실례화 대상으로 수상이this를 집행한다.show(B), B류에서 show(B) 방법을 찾아서 찾았습니다. B와 B를 직접 출력합니다.
8번:
b는 B류의 실례화 대상으로 수상이this를 집행한다.show(C), B류에서 show(C) 방법을 찾았는데 찾지 못해서 슈퍼에 왔습니다.show(c), B의 초클래스는 A이기 때문에 A클래스에서 show(C) 방법을 찾았지만 찾지 못해this에 도착했다.show(super C), C의 초클래스는 B이기 때문에 B클래스에서 show(B)f방법을 찾고 찾았기 때문에 B클래스에서 show(B)방법을 실행하여 B와 B를 출력한다.
9번:
b는 B류의 실례화 대상으로 수상이this를 집행한다.show(D), B류에서 show(D) 방법을 찾았는데 찾지 못해서 슈퍼에 왔습니다.show(D), B의 초클래스는 A클래스이기 때문에 A클래스에서 show(D) 방법을 찾아서 찾았습니다. AandD를 출력합니다.
이것은 제가 인터넷의 제목을 보고 정리한 방법입니다. 여러분께 좋은 점이 있기를 바랍니다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기