자바 에서 추상 적 인 속성 예제 를 어떻게 정의 합 니까?

머리말
본 고 는 주로 자바 에서 추상 적 인 속성 과 관련 된 내용 을 정의 하여 여러분 에 게 참고 학습 을 제공 하 는 것 을 소개 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
Abstract 키 워드 는 보통 클래스 와 방법 에 사용 되 며,어떤 행위 의 실현 을 하위 클래스 에 위탁 합 니 다.자바 가 추상 적 인 속성 을 지원 하지 않 기 때문에 클래스 속성 을 추상 으로 표시 하려 고 하면 컴 파일 시 오류 가 발생 할 수 있 습 니 다.
본 튜 토리 얼 에서 우 리 는 추상 적 인 속성 을 정의 하 는 두 가지 방법 을 소개 할 것 이다.이런 추상 적 인 속성 은 하위 클래스 에서 설정 할 수 있 고 Abstract 키 워드 를 사용 하지 않 는 다.
실 용 사례
특정한 업무 의 정 보 를 기록 하기 위해 서 트 랜 잭 션 을 기록 하 는 로그 모듈 을 실현 하고 싶다 고 가정 합 니 다.우 리 는 이 모듈 이 추상 적 이 기 를 바란다.그러면 우 리 는 서로 다른 로그 기록 방식 을 실현 할 수 있다.예 를 들 어 파일 이나 데이터 베이스 에 기록 할 수 있다.
Google 엔진 은 로그 의 정 보 를 연결 하고 String 에 미리 정 의 된 구분자 로 저장 합 니 다.구체 적 으로 어떤 구분 자 를 사용 해 야 하 는 지 는 로그 기록 의 규칙 에 달 려 있 습 니 다.예 를 들 어 문자 로 기록 할 수 있 습 니 다."로그 기록 의 서로 다른 부분의 정 보 를 분할 할 수 있 습 니 다.
따라서 구분자 가 우리 의 엔진 에 대해 추상 적 으로 보이 기 때문에 모든 로그 기록 규칙 에 의 해 명확 하 게 정의 해 야 한다.
다음은 구분자 의 정 의 를 하위 클래스 에 위탁 하 는 두 가지 방식 을 제공 합 니 다.
추상 류 에서 매개 변 수 를 가 진 구조 함 수 를 정의 합 니 다.
추상 류 에서 동적 속성 을 정의 하 는 첫 번 째 방법 은 매개 변수의 구조 함 수 를 정의 하 는 것 이다.
그래서 우 리 는 이렇게 이 엔진 을 실현 할 수 있다.

// TransactionManager.java

public abstract class TransactionManager {
 private String separator;
 
 public TransactionManager(String separator) {
 this.separator = separator;
 }
 
 public abstract void writeTransaction(String result);
 
 public Transaction startTransaction()
 {
 Transaction transaction = new Transaction(System.currentTimeMillis());
 return transaction;
 }
 
 public void endTransaction(Transaction t) {
 long processingTime = System.currentTimeMillis() - t.getStartTime();
 
 StringBuilder logBuilder = new StringBuilder();
 logBuilder.append(t.getStartTime());
 // Notice the use of this.separator
 logBuilder.append(this.separator);
 logBuilder.append(processingTime);
 logBuilder.append(this.separator);
 logBuilder.append(t.getData());
 
 String result = logBuilder.toString();
 writeTransaction(result);
 }
}
추상 류 에서 파 라 메 터 를 가 진 구조 함 수 를 정의 할 때 하위 클래스 는 자신의 구조 함 수 를 강제로 정의 하고 호출 합 니 다super().이렇게 하면 우 리 는 이미 사용 한 로그 기록 메커니즘 에 separator 속성 을 강제로 의존 할 수 있다.
주의:우리 의 엔진 은 모든 로그 메커니즘 이 공유 하 는 정적 행 위 를 실현 했다.startTransaction(),endTransaction() ,동시에 동적 행위writeTransaction()를 하위 클래스 에 맡 겨 실현 했다.
현재 트 랜 잭 션 관리 자 를 만 들 려 면 로그 내용 을 파일 에 기록 하면 이렇게 정의 할 수 있 습 니 다.

public class TransactionManagerFS extends TransactionManager{
 
 // The IDE forces you to implement constructor.
 public TransactionManagerFS(String separator) {
 super(separator);
 }
 
 @Override
 public void writeTransaction(String result) {
 System.out.println("The following transaction has just finished: " );
 System.out.println(result);
 }
}
다음은 코드 가 어떻게 작 동 하 는 지 테스트 를 해 보 겠 습 니 다.

public static void main(String[] args) throws InterruptedException {
 // we pass the separator explicitly in the constructor
 TransactionManager transactionManager = new TransactionManagerFS(",");
 Transaction transaction = transactionManager.startTransaction();
 transaction.setData("This is a test transaction !!");
 Thread.sleep(1500);
 transactionManager.endTransaction(transaction);
 }
출력:

The following transaction has just finished: 
1502179140689,1501,This is a test transaction !!
getter 방법 으로 구분자 전달
또 다른 동적 속성 을 실현 하 는 방법 은 추상 적 인 getter 방법 을 정의 함으로써 현재 로그 기록 체제 에 따라 필요 한 분리 자 를 검색 하 는 것 이다.우리 엔진 에 서 는 구분자 가 필요 할 때 이 getter 방법 을 호출 하여 얻 을 수 있 습 니 다.
다음 에 우 리 는 엔진 을 이렇게 수정 할 것 이다.

public abstract class TransactionManager {
 
 public abstract String getSeperator();
 public abstract void writeTransaction(String result);
 
 public Transaction startTransaction()
 {
 Transaction transaction = new Transaction(System.currentTimeMillis());
 return transaction;
 }
 
 public void endTransaction(Transaction t) {
 long processingTime = System.currentTimeMillis() - t.getStartTime();
 
 StringBuilder logBuilder = new StringBuilder();
 logBuilder.append(t.getStartTime());
 // Notice the use of getSeparator()
 logBuilder.append(getSeperator());
 logBuilder.append(processingTime);
 logBuilder.append(getSeperator());
 logBuilder.append(t.getData());
 
 String result = logBuilder.toString();
 writeTransaction(result);
 }
}
또한 TransactionManager FS 를 다음 과 같이 수정 합 니 다.

public class TransactionManagerFS extends TransactionManager{
 
 @Override
 public String getSeperator() {
 return ",";
 }
 
 @Override
 public void writeTransaction(String result) {
 System.out.println("The following transaction has just finished: " );
 System.out.println(result);
 }
}
그리고 main 을 수정 하여 새로운 실현 을 사용 하고 정확 한 결 과 를 확보 합 니 다.

public static void main(String[] args) throws InterruptedException {
 // The separator is defined implicitly using getSeparator() method of the manager
 TransactionManager transactionManager = new TransactionManagerFS();
 Transaction transaction = transactionManager.startTransaction();
 transaction.setData("This is a test transaction !!");
 Thread.sleep(1500);
 transactionManager.endTransaction(transaction);
 }
출력:

The following transaction has just finished: 
1502179140689,1501,This is a test transaction !!
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
미 친 기술 주택
원문:http://programmergate.com/define-abstract-property-java/
본 논문 의 첫 번 째 위 챗 공식 번호:충실 한 뇌 동

좋은 웹페이지 즐겨찾기