public interface Utility {
}class Phone implements Utility {
void use(){
    System.out.println("Using Phone");
}
}public class Test {
public static void main(String args[]) {
Utility util = new Phone();
util.use();
}
}
那里出错了?? 晕了?本人新手

解决方案 »

  1.   

    需要对util向下转型((Phone)util).use();//这样就对了
      

  2.   

    建议看一下thinking in java 第7章
      

  3.   

    Phone类实现 Utility接口,因为Utility接口本身不存在use方法
    所以util.use(); 会出现错误。
    解决办法:你可以在Utility接口中添加use方法的声明
      

  4.   

    楼上正解,use()方法要在接口里面声明。
      

  5.   

    interface 前面把 public 去掉
      

  6.   

    楼上可知,interface 在不声明的时候自动就是public的,所以写不写无所谓。
      

  7.   

     首先, 因为你定义了public class Test, 这样类Test就成了public了,因为一个文件里只能有一个public类,所以必须去掉 interface Utility前面的public.
     其次, 因为你创建了以个util对象 (Utility util = new Phone();), 你想用util来访问 Phone中的use方法,就会出现错误,所以你必须得对use方法进行声明, 注意, 接口中的方法默认是 public abstract的。
    第三, 你光对use方法在接口中声明还不够, 因为Phone中的use方法没有设为public, 注意没有设访问控制的方法是default, 所以你必须给use方法在phone的类中加public.
    现在运行一下就没有问题了。interface Utility { 
    void use();


    } class Phone implements Utility { 
    public void use(){ 
    System.out.println("Using Phone"); 

    } public class Test { 
    public static void main(String args[]) { 
    Utility util = new Phone(); 
    util.use(); 


      

  8.   

    对第三点补充一下:
    1. 一个类来实现(implements)一个接口,如果这个类不是虚类(abstract), 这个类就必须实现改接口中的所有方法.
    2. 一个类来实现(implements)一个接口,这个类不能变小接口方法的访问控制标示,例如,接口中的方法必须是public,那么实现它的方法也就必须是public, 不能用protect, default(不写就是default)或者private。
      

  9.   

    还有一种做法是不使用Java的多态,但是不提倡这么做,这样做的话接口就没有意义了。
    代码附下:    interface Utility { 
    //void use();


    } class Phone implements Utility { 
    public void use(){ 
    System.out.println("Using Phone"); 

    } public class Test { 
    public static void main(String args[]) { 
    Utility util = new Phone(); 
    //util.use(); 
    ((Phone)util).use(); 


      

  10.   

    一个类中只能有一个public  
    public interface Utility { } 这里会报错
    顶一下  5楼的 他的不错
    ((Phone)util).use() 这里强转下就不会报错了,其实你这个借口没有意思 ,等于脱裤子放屁一样
      

  11.   

    这是静态联编, 在编译的时候Utility util = new Phone(); 中的util被声明为你前面加的接口类型Utility,那么你下面那句util.use()编译器会到Utility中找是否有use()这个方法, 很明显没有, 所以出现错误.解决的方法上面的朋友都已经写了很多了我不再写......
      

  12.   

    记住一点 当一个类实现了一个借口 当将类的应用上转型为接口时
    接口只能看到它自己存在的变量或者方法 实现它的类 新添加的 它就看不到了 
    因此((Phone)util).use() 强行转换类型 再去掉 interface 前面的public就可以了