2016-10-28 3 views
1

이 자바 코드로 인해 혼란 스럽습니다. 대부분 객체 지향 프로그래밍 기술이 부족하기 때문입니다.코드 설명 : DataModel model = new FileDataModel (새 파일 ("intro.csv"));

DataModel model = new FileDataModel (new File("intro.csv")); 

FileDataModel과 관련된 DataModel은 어떻습니까? 이것은 'isa'관계인가? 여기서 FileDataModel은 DataModel이고, 그렇다면 일반적으로 부모 클래스는 모든 하위 클래스와 동일 할 수 있습니까? 또한 객체는 부모/하위 클래스의 관점에서 전혀 관계가없는 다른 클래스와 동일 할 수 있습니까?

+0

당신이 내 설명을 이해 않았다 ClassCastException 얻을 내가 컴파일러 오류가 나는 hoever 것입니다하지 않습니다? – ItamarG3

답변

3

첫 질문에 예.

FileDataModelDataModel이며, 그래서 하나는 DataModel 참조에게 FileDataModel 객체 ... 이것은 upcasting 호출을 줄 수 있고, OOP의 핵심 원칙이다.

두 번째 질문은 아니요. 업 캐스팅은 참조가 생성 된 객체의 부모 일 때만 작동합니다. 예에서

Number n = new Integer(1);// Integer is of type Number 
String s = new Integer(5);// Integer is unrelated to String 

는 I 정수 n을 생성하지만, 기준 형 Number이다. 그게 Integer (자식)의 Integer 확장 때문에 작동합니다 Number. 그러나 두 번째 줄은 컴파일되지 않습니다. 이는 StringInteger이 서로 관련이 없으므로 (어느 쪽도 다른 쪽의 부모가 아니기 때문)

+0

두 번째 예를 들어 줄 수 있습니까? – user

+1

예. 잠시만 기다려주십시오 – ItamarG3

+0

@user 당신이 대답을 잘했다고 생각한다면, 그것을 업 워드하고 받아 들일 수 있다고 표시 할 수 있습니다. – ItamarG3

1

추가 정보 abscence를 기반으로 추측해야하지만 것인가 :

FileDataModel 확장 또는 구현 보이는 DataModel (나는 그것을 확장하는 추측에는 요) 따라서 DataModel 모델이다, 현실에서는, FileDataModel, FileDataModel이 모두 DataModel (OOP 및 확장/상속의 기본 원칙)이기 때문에 DataModel 객체 참조에 할당 할 수 있습니다.

FileDataModel 경우 컴파일러는 당신이 명시 적으로 런타임 오류로 끝날 수있는 경우에 DataModel로,에 FileDataModel 캐스팅하지 않는 한, 당신이 말하는 동안 오류가 FileDataModel을 캐스팅 할 수없는 가정 것이다 DataModel 연장하지 않았다 DataModel

그래서 예를 들어 나는 대입 할 때 :

String s = new Integer(5); 

내가 그것을 할당 할 수 없습니다 때문에 정수 문자열이 아닌 것을 경고 컴파일 시간을 얻을 것이다.

내가 그러나 이렇게 할 경우 :

String s = (String)new Integer(5);