:하지 클래스 선언 "구현"을 앞에 구현은 항상 후 작성 예를 들어, 클래스 선언으로 연장해야하는 이유
public class Register implements ModelDriven extends ActionSupport
는 컴파일 타임 오류
왜
public class Register extends ActionSupport implements ModelDriven
:하지 클래스 선언 "구현"을 앞에 구현은 항상 후 작성 예를 들어, 클래스 선언으로 연장해야하는 이유
public class Register implements ModelDriven extends ActionSupport
는 컴파일 타임 오류
왜
public class Register extends ActionSupport implements ModelDriven
Java 컴파일러가 클래스를 바이트 코드로 변환 할 때 먼저 부모 클래스를 찾아야합니다. 이는 클래스의 기본 구현이 관련 메서드 및 필드가 들어있는 부모 클래스의 바이트 코드를 가리키는 것이기 때문입니다. 그런 다음 하위 클래스 함수의 코드에 대한 포인터를 추가합니다.이 중 일부는 'implements'키워드로 지정됩니다.
상위 클래스는 컴파일 할 수 있어야하므로 컴파일러가 해당 클래스가 무엇인지 알면 더 쉽습니다. 또한 하나의 클래스 만 확장 할 수 있지만 인터페이스의 수에는 제한이 없습니다. extends 키워드가 임의의 수의 구현 명령 사이에서 혼합 될 수 있으면 컴파일 시간이 증가합니다. 컴파일러는 dev 시간을 줄이기 위해 최대한 빨리 실패하기 때문에이 선택은 논리적입니다. 또한 같은 이유로 클래스에 대해 명확하게 생각하는 데 도움이됩니다.
+1 마침내 정상적인 답변. 고맙습니다. :) – weltraumpirat
최선을 다합니다. 결국, 우리는 모두 함께! –
@ NathanielFord, 우리가 정말로입니까? 나는 크게 잘못 알고있다. – jn1kk
아마도 컴파일러의 작업을 더 쉽게 만들 수 있습니다. 그것은 단지 대회입니다. 이러한 것들을 재 배열 할 수있는 이점이 없습니다.
Java 기능이 public int (int a, int b)add{ return a+b; }
과 같이 선주문 표기법으로 쓰여지지 않은 이유를 묻는 것과 같습니다.
'C'의 무엇인가. 서면으로 된 자세한 정보를 읽으면 코드가 유익합니다. –
대회가 아닙니다. 구문 규칙입니다. 무시할 수있는 규약은 컴파일러가 규칙을 적용합니다. –
Java가 그렇기 때문에. –
... 그게 렉서가 지시하는 방식인가요? – Makoto
Sue Oracle for this =) – 4lex1v