2012-12-30 6 views
0

아래 코드에 대해 혼동스러워합니다. 이 코드는 다른 사람이 작성한 것으로 현재 Java에서 매개 변수 전달이 작동하는 방식을보다 잘 이해할 수 있도록 코드를 연구 중입니다. 코드 # 1Java 매개 변수 전달

addKeyListener((KeyListener)new TAdapter()); 

코드 # 2

addKeyListener(new TAdapter()); 

는 동일한 것을 의미하고 TAdapter는 KeyAdapter 클래스를 확장하는 클래스입니다 가정 같은 일을 수행

가 있습니까? 또한 Eclipse에서 읽은 메서드 설명에서 메서드가 KeyListener 개체를 사용하더라도 TAdapter 개체를 KeyListener로 명시 적으로 캐스팅하지 않아도됩니다. 왜 이것이 가능한가? Java 문서에서 KeyAdapter 클래스에 대한 빠른 검색을 수행했으며 KeyAdapter 클래스는 KeyListener 인터페이스를 구현합니다. Java가 매개 변수 전달에서 작동하는 방식 중 하나는 메서드가 메서드 설명에 나열된 동일한 이름의 인터페이스를 구현하는 특정 클래스에서 상속 한 클래스의 인스턴스를 받아 들일 수 있다고 가정하는 것이 안전합니까? 그렇다면 왜 이것이 가능합니까?

P. 한 가지 덧붙여서 필자는 프로그래머가 TAdapter 클래스를 명명하는 이유를 이해하지 못합니다. T는 무엇을 의미합니까? 나는 또한 다른 소스 코드에서 이런 유형의 클래스 이름을 알아 차렸지만, 나는이 가정 된 규칙을 결코 이해하지 못했다.

+0

나는 당신의 옆 질문을 사랑합니다. 당신은 그 질문을하는 것이 옳습니다. 필자는 평소에 다른 프로그래머를 비판하지 않겠지 만, 'TAdapter'는 끔찍한 이름이라고 말할 수 있습니다. 문자 'T'또는 무엇인가를 적용하려고하는 것 같습니다. (예, "타입"에 대한 헝가리 표기법이지만 쳇입니다!) –

+0

고마워! 나는이 신비한 T 편지를 결코 내 수업의 이름을 지을 때 채택하지 않을 것입니다. 나는 나쁜 습관을 싫어한다. – Nicholas

+0

OP는 프로그래밍, 특히 Java의 개념을 이해하지 못합니다. 이름 지정 규칙이 그 중 하나입니다. –

답변

1

글쎄, 그렇습니다. "메소드는 인터페이스를 구현하는 특정 클래스로부터 상속받은 클래스의 인스턴스를 받아 들일 수 있습니다."

더 일반적으로 인터페이스는 다형성면에서 해당 인터페이스의 하위 클래스라고 할 수 있으며 매개 변수 나 변수에는 선언 된 클래스의 하위 클래스 인스턴스가 할당 될 수 있습니다.

왜 클래스 이름이 TAdapter인지에 대해 나는 대답 할 수 없다. 적어도 일반적으로 사용되는 규칙은 아닙니다. 방법 : 인수로 ObjectParameter 소요

+0

와우! 나는 인터페이스를 구현하는 클래스가 그 인터페이스의 서브 클래스가 될 수 있다는 것을 결코 알지 못했다. TAdapter는 임의의 클래스 이름입니다. 나는이 클래스 이름이 소스 코드를 보는 내 자신의 경험에서 두 번째로 같은 이름이라는 것이 이상하다는 것을 알았다. – Nicholas

+0

그게 자바 인터페이스의 핵심입니다. :) – Dolda2000

+0

아, 인터페이스는 모든 클래스가 공유하는 일련의 메소드라고 생각했습니다. – Nicholas

1

경우 인해 다형SubClassOfObjectParameter에 걸릴 수있다. 이 비밀 때문에

TAdapter의 시작에 T 그냥 나쁜 명명 스타일!

+0

아, 알겠습니다. 그래서 다형성은 이것을 가능하게합니다. 나쁜 명명 스타일에 대해 염두에 두겠습니다. 감사합니다 아브라함! =] – Nicholas

1

그래서 내가 안전 통과는 방법은 클래스의 인스턴스를 받아 들일 수 있다는 것입니다 자바 매개 변수에 작동하는 방식의 하나의 가정입니다 그 같은 이름의 인터페이스를 구현하는 특정 클래스 상속 메소드 설명에 나열되어 있습니까? 이 그렇다면

, 왜이 도 가능하다?

이것은 다형성 때문입니다. this을 읽어야합니다. 특히 다형성 하위 섹션.

+1

나는 다형성을 더 많이 이해합니다. 고마워, 드 문. – Nicholas