자바 에서 추상 적 인 속성 예제 를 어떻게 정의 합 니까?
본 고 는 주로 자바 에서 추상 적 인 속성 과 관련 된 내용 을 정의 하여 여러분 에 게 참고 학습 을 제공 하 는 것 을 소개 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
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/
본 논문 의 첫 번 째 위 챗 공식 번호:충실 한 뇌 동
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.