2012-12-17 96 views
1

我有這個公共抽象類MyClass的與抽象方法抽象的公共無效myMethod的()在我的Android庫項目。不能覆蓋超類的抽象方法時,子類是在另一個包

我想在另一個項目中構建這個類的具體實現,這是一個應用程序項目並引用了庫項目。在子類中的方法實現標有「@覆蓋」和Eclipse使我有以下錯誤:

The method myMethod() of type MySubClass must override or implement a supertype method

我刪除「@覆蓋」和錯誤變成警告:

The method MySubClass.myMethod() does not override the inherited method from MyClass since it is private to a different package

這說明什麼意思?是的,這些類位於不同的項目和不同的包中,但這與繼承有什麼關係?兩種方法都是公開的。

這裏是超代碼:

package com.emret.myPackage; 

//Some imports here 

public abstract class ThingsProvider { 

//Class code here 

    abstract public void createThings(); 

} 

這裏是子類:

package com.emret.myPackage.subPackage; 

//Some imports here 

public class SmallThingsProvider extends ThingsProvider { 

//Class code here 

    @Override 
    public void createThings() { 
     createThing(0, R.drawable.cat, R.raw.cat); 
     createThing(1, R.drawable.dog, R.raw.dog); 
     createThing(2, R.drawable.cow, R.raw.cow); 
     createThing(3, R.drawable.sheep, R.raw.goat); 
     createThing(4, R.drawable.bicycle, R.raw.bicycle); 
    } 
} 
+0

你可以顯示兩個方法/類定義嗎?這聽起來像他們有不同的返回類型/參數。 – Thomas

+1

你確定他們都是公開的嗎?他們有'公共'關鍵字嗎?這聽起來像超類的方法是包私有的,如果沒有關鍵字,這是默認的可見性。例如,'abstract void foo()'是包私有的,只能被同一包中的類覆蓋。 – yshavit

+0

@Thomas:我已經更新了問題以包含課程代碼 –

回答

3

它看起來「yshavits」指出了確切的痛點,但其他的限制。

我的抽象方法在開始時是包私有的。當我在子類中遇到錯誤時,我將其更改爲public,但在將其更改爲public後,錯誤並未消失。

事實證明,只要被引用的項目被完整且成功地編譯,引用項目中的引用就不會更新。被引用項目中的任何單個錯誤都會阻止成功編譯,並阻止引用項目檢測其更新的類信息。

我被引用的項目有另一個錯誤。即使與上述類完全分離,它也會阻止成功的編譯並防止引用項目中的引用更新。

背景編譯器不像我希望的那樣聰明。

+1

調試它的榮譽! – yshavit

0

我認爲你正在使用Java 1.5,請轉到項目/屬性,Java編譯器和確保你至少使用java 1.6。

相關問題