在Java中将接口作为返回类型返回时出现问题

在Java中将接口作为返回类型返回时出现问题,java,android,types,interface,return,Java,Android,Types,Interface,Return,我有以下代码: 文件名:A.java package test1 public interface A { int get(); int set(); } package test1 public class B implements A { int get() { ... } int set() { .... } } package test2 import test1.A; import test1.B; p

我有以下代码:


文件名:A.java

package test1

public interface A {
   int get();
   int set();
}
package test1
public class B implements A {

    int get() {
       ...
    }

    int set() {
     ....
    }
}
package test2

import test1.A;
import test1.B;

publc class C {

        public A getNum() {
             B test = null;

             return(test);
        }
}

文件名:B.java

package test1

public interface A {
   int get();
   int set();
}
package test1
public class B implements A {

    int get() {
       ...
    }

    int set() {
     ....
    }
}
package test2

import test1.A;
import test1.B;

publc class C {

        public A getNum() {
             B test = null;

             return(test);
        }
}

文件名:C.java

package test1

public interface A {
   int get();
   int set();
}
package test1
public class B implements A {

    int get() {
       ...
    }

    int set() {
     ....
    }
}
package test2

import test1.A;
import test1.B;

publc class C {

        public A getNum() {
             B test = null;

             return(test);
        }
}

当我在Eclipse-->示例Java项目中编译上述代码时,它运行良好。但是当我在Android中编译相同的代码时,它抛出了以下错误::方法C.getNum返回不可用的类型A

请让我知道,我错在哪里

提前感谢,,
Kranti

接口
实现
不是java关键字。您应该使用
接口
实现
。Java区分大小写。由于其他编译错误,类路径上的类型
A
不可用

以下代码应该可以工作:

public class Test {
    interface  A {
        int get();
        int set();
    }

    class B implements A {

        @Override
        public int get() {
            return 0;
        }

        @Override
        public int set() {
            return 0;
        }
    }

    class C {
        public A getNum(){
            A a = new B();
            return a; 
        }
    }
}

我根据您的示例生成了该代码。但是你知道我无法想象这段代码有什么用处。

假设A.java、B.java在test目录下,C.java在root目录下,上述代码有很多问题

  • 接口和实现应为小型大写字母,即“接口”和“实现”
  • 接口方法是公共的,即使没有声明。因此,在B中实现它时,get和set都应该是公共的
  • A.java和B.java应该有包测试;作为第一行
  • 您需要导入测试;进口测试B
  • C没有类声明
  • B检验=0;这是错误的。它应该是B test=null;或B测试=新的B();取决于您计划使用什么。0是整数,不能强制转换为B
  • 返回B无效,因为B是类名。您可能打算返回测试 这是一个修改过的代码

    A.java

    package test;
    public interface A {
        int get();
        int set();
    }
    
    B.java

    package test;
    public class B implements A {
    
        public int get() {
            return 0;
        }
    
        public int set() {
            return 0;
        }
    }
    
    C.java

    import test.A;
    import test.B;
    
    public class C {
        public A getNum() {
            B test = new B();
    
            return test;
        }
    }
    

    我看到的问题只是在接口A文件中提到包声明,即包test1。

    声明的是同一个包吗?
    C.java
    是否有类定义?您需要复制并粘贴精确的代码。在谈论编译器错误消息时特别有用(复制并粘贴这些消息)。@Scrum Meister:是的,C.Java有类定义。我已经更新了代码。请再检查一遍,告诉我哪里做错了。@tomhawtin:Compiler抛出方法C.getNum返回不可用的类型A;没有其他错误/警告。在导入
    import Test1.A中包括包名@Alex和@Tigris:非常感谢您提供的信息。很抱歉,我不能正确地写出问题中的语法。正如您所建议的,实际代码仅与此类似。Java在另一个目录中。这就是原因,我正在导入其他类。在C.Java->getNum()-->中,我返回(test)。但是编译器抛出了一个错误:getNum()返回不可用的类型A。@Kranti您一定忘了在A/B.java中放置包声明。我已经更新了代码,就好像A和B.java驻留在测试包中一样。。不更改为import src/Test1.A;导入src/Test1.B;我也遇到了同样的编译错误。@Kranti import和package语句使用“.”而不是“/”作为分隔符。如果您希望根包名为“src”,那么包声明将是“package src.Test1”和“package src.Test2”,导入语句将是“import src.Test1.A”和“import src.Test1.B”;抱歉,我不明白您的意思。。您的意思是说,在A.Java中不应该有任何包声明吗?