Program Tip

@Override를 사용하여 "수퍼 클래스 메서드를 재정의해야 함"이 표시되는 이유는 무엇입니까?

programtip 2020. 11. 22. 20:26
반응형

@Override를 사용하여 "수퍼 클래스 메서드를 재정의해야 함"이 표시되는 이유는 무엇입니까?


다음 코드는 public void onClick에이 오류 메시지를 생성합니다 .

이 라인에서 여러 마커
- 구현 android.view.View.OnClickListener.onClick
- 타입의 새로운 View.OnClickListener (방법 onclick을 (보기)) {} 슈퍼 클래스의 메소드를 오버라이드 (override) 할 필요

이유를 이해할 수 없습니다. 이 코드는 내가 본 수많은 예제에서 가져온 것입니다. 무엇이 잘못되었을 수 있습니까?

private Button audioButton;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    audioButton = (Button) findViewById(R.id.imageButton1);
    audioButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View button) {
            if (button.isSelected()) {
                button.setSelected(false);
            }
            else {
                button.setSelected(true);
            }
        }
    });
}

프로젝트의 속성을 확인하고 Java Compiler-> Compiler 준수 수준1.6 으로 설정되어 있는지 확인합니다 .


이는 Java 1.5와 1.6 사이의 소스 코드 수준 비 호환성 때문일 가능성이 큽니다.

  • Java 5에서 @Override주석은 메서드가 실제로 수퍼 클래스의 메서드를 재정의해야합니다.

  • Java 6 이상에서는 메소드가 수퍼 클래스 또는 인터페이스에서 추상 메소드를 구현하는 경우 @Override주석 충족됩니다.

따라서 작동 할 것으로 예상되는 코드에서 이것을 볼 수있는 가장 가능성있는 이유는 Java 5 컴파일러 (또는 컴파일러의 소스 준수 수준이 5로 설정된 다른 컴파일러)로 Java 6 (또는 그 이상) 코드를 컴파일하고 있기 때문입니다.


컴파일러를 1.6으로 설정했지만 여전히이 오류가 발생하면 Eclipse가 항상이 작업을 수행하기 때문에 가져 오기를 확인하십시오.

import android.content.DialogInterface.OnClickListener  

대신->

import android.view.View.OnClickListener

그것은 내 문제를 해결합니다.


MAVEN 사용자 빌드에 Maven을 사용하는 경우 빌드 중에 이클립스 설정을 재정의 할 수 있습니다. 따라서 Eclipse를 1.7로 설정했지만 Maven JDK 빌드 버전 (이 작성 당시 기본값은 1.5)을 특별히 설정하지 않으면 이클립스 대상 컴파일러를 다시 1.5로 재설정합니다. Maven 컴파일러를 다음과 같이 설정하십시오.

    <build>
        ...
        <plugins>
            ....
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>            
    </build>

나에게 이것은 내가 재정의하려는 메서드가 패키지 비공개 이고 다른 패키지에서 재정의하려고 했기 때문에 발생 했습니다.

Eclipse는 추가로 다른 경고로 인해 눈치 채지 못한 경우 경고를 추가합니다.


이제 2018 년입니다! 쉽게 참조하려면 아래 스크린 샷을 참조하십시오.

enter image description here


Putting a View.onCLickListener() solved the problem to me. My Java Compiler --> Compiler Compliance level is already set to 1.6 but still I was having the same problem.

But changing the code

rdBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRadioButtonClicked(v);
            }
        });

to

rdBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRadioButtonClicked(v);
            }
        });

solved the problem in my case.

참고URL : https://stackoverflow.com/questions/8697513/why-do-i-get-must-override-a-superclass-method-with-override

반응형