자바 의 계승 과 조합 에 대한 잘못된 예
자바 의 계승 과 조합 에 대한 잘못된 예
절대 다수의 사람들 이 자바 중의 '계승' 과 '조합' 이라는 두 가 지 를 비교적 잘 알 고 있다 고 믿 습 니 다. 이 글 은 주로 이 두 가지 화제 에 대해 이야기 합 니 다.만약 에 제 가 잘못 썼 거나 유치 하고 논증 이 명확 하지 않 으 면 여러분 의 댓 글 에 대한 지적 을 환영 합 니 다.
'조합' 과 '계승' 이 무엇 입 니까?
만약 에 2 개의 class 가 있다 고 가정 하면
A
과 B
:extends
B 가 있 으 면 우 리 는 A 가 B 를 계승 하고 A 는 자 류 이 며 B 는 부 류 라 고 말 하 는데 이런 상황 이 바로 계승 이다.각각 어떤 상황 에서 사용 합 니까?
돌 이 켜 보면 우 리 는 보통 어떤 상황 에서 이 두 가 지 를 고려 합 니까?나 는 대충 생각해 보 니 종종 다음 과 같은 장면 이 있다.
abstract class
또는 interface
abstract class
과 interface
(자바 8 중의 default method) 모두 달성 할 수 있 습 니 다.좋아, 이렇게 쓸데없는 말 을 많이 했 으 니, 나 는 직접 나의 관점 을 던 져 버 릴 거 야. 벽돌 을 찍 는 것 을 환영 해.
abstract class
또는 interface
반면교사
비교적 흔히 볼 수 있 는 예: 우 리 는 실제 프로젝트 에서 흔히 정 의 된
POJO
또는 model
이 있 는데 이런 model 은 흔히 명사 와 유형 이 같은 속성 이 있다. 예 를 들 어:// db table primary key
private int id;
흔 하 죠? 하지만 저 는 실제 업무 에서 많은 동 료 를 만 났 습 니 다. 시스템 은 이름 이
BaseModel
또는 RootModel
일 수 있 는 종 류 를 정의 하고 위의 속성 id
을 안에 넣 은 다음 에 전체 프로젝트 의 모든 model 이 이 BaseModel 류 를 계승 합 니 다.당신들 은 이런 동 료 를 만난 적 이 있 습 니까?너 희 는 이렇게 쓰 면 무슨 좋 은 점 과 나 쁜 점 이 있 을 것 이 라 고 생각 하 니?먼저 좋 은 점 을 말 하 세 요. 굳이 좋 은 점 을 가 져 다 줄 수 있다 면 키 보드 를 몇 번 덜 두 드 리 는 것 외 에 하위 클래스 에서 이런 속성 이 적 다 는 것 외 에 실질 적 인 좋 은 점 을 보지 못 했 습 니 다.하지만 프로젝트 의 후속 유지 에 큰 문 제 를 가 져 왔 다.
그리고 이런 서법 의 잠재 적 인 문 제 를 말 하 자.
어느 날, 몇 가지 이유 로 하위 클래스 A (BaseModel 계승) 의 속성
id
을 프로젝트 의 어느 곳 에서 사용 하고 싶 습 니까?지혜 로 운 당신 은 IDE 의
find usages
를 능숙 하 게 사용 한 후에 당신 이 찾 은 사용 위치 가 매우 많 고 많은 것 이 당신 의 관심 사가 아니 라 는 것 을 알 게 될 것 입 니 다.하지만 어 쩔 수 없 이 BaseModel 의 클래스 를 계승 한 다른 속성 id 의 사용 위 치 를 찾 았 습 니 다.프로젝트 가 크 지 않 으 면 검색 숙련 이 적 을 수 있 습 니 다. 프로젝트 가 좀 크 면 요?검색 에 50 곳 이 넘 으 면 어떻게 하 시 겠 습 니까?어떻게 이런 상황 을 피 할 수 있 습 니까? 그것 은 바로 이런
BaseModel
방식 으로 속성 계승 을 사용 하지 않 는 것 입 니 다.물론 엄밀 한 기간 을 위해 저 는 이 뜻 을 상세 하 게 말씀 드 려 야 합 니 다. 저 는 속성 계승 에 완전히 반대 하지 않 았 습 니 다. 명확 하 게 말씀 드 리 겠 습 니 다.내 가 반대 하 는 것 은 전체 프로젝트 의 모든 model 이 BaseModel 을 계승 한 후에 공용 속성 을 BaseModel 에 두 는 것 이다.
라 는 생각 에 주 의 는 전체 항목 의 것 이다.
후기
위의 반면교사 의 예 는 개인 적 으로 자주 만 나 기 때문에 단독으로 꺼 내 서 말씀 드 리 겠 습 니 다. 여러분 의 프로젝트 에서 이런 상황 이 발생 한 적 이 있 는 지 확실 하지 않 습 니 다.어쨌든 나 는 이미 동료의 이런 서법 에 여러 차례 함정 에 빠 진 적 이 있다.
'조합' 과 '계승' 과 관련 된 흔 한 실 수 는 아직 생각 하지 못 했 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.