자바 재 활용,다 중&인터페이스

모든 클래스 에 main()방법 을 만 들 수 있 습 니 다.유닛 테스트 에 편리 합 니 다.내 보 내기 대상 을 만 들 때 이 대상 은 내 보 내기 대상 내부 에 포 장 된 기본 대상 을 포함 하기 때문에 자바 는 내 보 내기 류 의 구조 기 에 기본 구조 기 를 자동 으로 삽입 합 니 다(슈퍼).구조 과정 에서 기본 클래스 에서 밖으로 확산 합 니 다.파 라 메 터 를 가 진 구조 기:슈퍼(int i){}와 같은 기본 구조 기 에 파 라 메 터 를 가지 고 있다 면 내 보 내기 류 의 구조 기 는 인삼 이 없 을 수도 있 고 인삼 이 있 을 수도 있 습 니 다.예 를 들 어 Extend()or Extend(int i)와 같 지만 내 보 내기 류 구조 기 에 서 는 슈퍼(int i)로 기본 구조 기 를 호출 해 야 합 니 다.그렇지 않 으 면 기본 구조 기 를 호출 합 니 다.찾 지 못 하면 오류 가 발생 합 니 다!대리:계승 과 그룹 에 있 습 니 다.우 리 는 한 구성원 의 대상 을 구성 할 클래스 에 두 었 습 니 다.그러나 이와 동시에 우 리 는 새로운 클래스 에서 이 구성원 의 대상 을 폭로 하 는 모든 방법(예 를 들 어 계승)을 드 러 냈 습 니 다.대 리 를 통 해 구성원 의 대상 부분 을 제공 하 는 방법 을 선택 할 수 있 습 니 다.자바 는 대 리 를 직접 지원 하지 않 습 니 다!위로 전환:내 보 내기 클래스 를 기본 클래스 로 변환 합 니 다.실제 적 으로 스 택 에 있 는 클래스 참조 변화 일 뿐 기본 클래스 참조 가 추 가 됩 니 다.더미 에 있 는 대상(내 보 내기 클래스 참조 와 기본 클래스 참조 가 같은 대상 을 가리 키 는 것)을 가리 키 고 내 보 내기 클래스 참조 에 비해 기본 클래스 참조 가 핑계 가 적 을 뿐 입 니 다.기본 클래스 참조 가 내 보 내기 대상 을 가리 키 면아래로 전환 하 는 데 는 아무런 문제 가 없 을 것 이다.final 데이터:상수,매개 변수:매개 변 수 는 가리 키 는 대상 을 참조 하여 변경 할 수 없습니다.방법:잠 금,덮어 쓰 지 않 음,클래스:private 방법 을 계승 하지 않 고 자동 으로 final 방법 으로 여 겨 집 니 다.내 보 내기 클래스 는 차단 되 어 있 으 며 다시 불 러 올 수 없습니다.
 
  “패 키 징"특징 과 행동 을 합 쳐 새로운 데이터 형식 을 만 듭 니 다."숨 김 실현 은 디 테 일 한'사유 화'를 통 해 인터페이스 와 분 리 를 실현 하고 다 중 적 으로 유형 간 의 우연 한 관 계 를 없앤다.방법 바 인 딩(하나의 방법 을 같은 방법 으로 테 마 를 연결 합 니 다):초기 바 인 딩(컴 파일 러 와 연결 프로그램 을 통 해 실현)은 과정 을 대상 으로 하 는 언어 에 사 용 됩 니 다.후기 바 인 딩(동적,실행 시 바 인 딩)은 실행 할 때 대상 의 유형 에 따라 바 인 딩 을 하고 실행 할 때 대상 의 유형 을 판단 하여 적절 한 방법 을 호출 합 니 다.(여기 서 말 하 는 것 은 자신의 이해 와 약간 차이 가 있 습 니 다.주로 대상 류 방법 호출 메커니즘)구조 기 내부 의 다 중 방법 을 모 르 는 행위 입 니 다.만약 에 구조 기 내부 에서 구조 중인 대상 의 특정한 동적 바 인 딩 방법 을 호출 하면 예 는 다음 과 같 습 니 다.
public class Test { 
 public static void main(String[] args) { 
 new B(); 
 } 
} 


class A { 
 void func() { System.out.println("fA"); } 
 A() { 
 System.out.println("begin A"); 
 func(); 
 System.out.println("end A"); 
 } 
} 

class B extends A { 
 void func() { System.out.println("fB " + i); } 
 int i = 1; 
 B() { 
 super(); 
 System.out.println("B " + i); 
 } 
} 
/*output 
begin A 
fB 0 
end A 
B 1 
*/

 (대상 의 초기 화 순 서 는'초기 화 와 청소'참조)에서 먼저 기본 클래스 A 의 구조 방법 을 실행 한 다음 에 func()방법 을 호출 합 니 다.func()방법 은 클래스 B 로 덮어 져 있 기 때문에 실제 적 으로 B.func()를 실행 하고 마지막 으로 클래스 B 의 구조 방법 을 실행 합 니 다.문 제 는 A 에서 B.func()를 실행 할 때 출력 하 는 i 가 0 이지 1 이 아니 라 0 이라는 것 이다.이 는 내 보 내기 클래스 B 의 구성원 이 초기 화 되 지 않 았 다 는 것 을 의미한다.이것 은 에서 초기 화 된 순서 문 제 를 검증 했다.그래서 구조 기 에서 유일 하 게 안전하게 호출 할 수 있 는 방법 은 기본 적 인 final 방법 이다. 인 터 페 이 스 는 클래스 와 클래스 간 의 프로 토 콜 을 만 드 는 데 사 용 됩 니 다.
 

좋은 웹페이지 즐겨찾기