package cn;
interface Work
{
void walk();
}class G implements Work
{
int a=2;
public void walk(){System.out.println("walk方法");}
public static void main(String[] args)
{
Work w=new G();
System.out.println(w.a);
}
}错误信息:
C:\java>javac -d . Work.java
Work.java:14: 找不到符号
符号: 变量 a
位置: 接口 cn.Work
                System.out.println(w.a);
                                    ^
1 错误

解决方案 »

  1.   

    w.a
    Work 里面都没有定义 a 
    哪儿来的w.a
      

  2.   

    Work w=new G();接口回调。
    一个接口引用,指向实现类的对象。因为你拿到的引用是接口的,所以只能操作接口里定义的方法和变量。
      

  3.   

    G g=new G();
    System.out.println(g.a);
    嗯,这样是可以的。
      

  4.   

    Work w=new G(); //因为这里接口没有a
    System.out.println(w.a);//所以这里调用会出错的。
      

  5.   

     System.out.println(w.a); 这一行有错误,a不是接口中的方法。 如果用接口的引用类型去指向实现类的对象,接口类的引用类型只能用接口中定义的方法。
      

  6.   

    LZ可能想用动态绑定吧。但是只有普通方法的调用才是多态的。即:静态方法,域,被子类覆盖的私有方法是不具有多态性的。
    所以即便你在接口中定义了a。也不会调用类中的a。
    调用的还是接口中的a.下面是体现普通方法的多态性:
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Work w=new G();
    w.walk();         }
      

  7.   


    interface Work{
    int a=4;
        void walk();
    }public class G implements Work{ int a=2;
    public void walk(){
    System.out.println("walk方法");
    }
    public static void main(String[] args) {

    Work w=new G();
    w.walk();
    System.out.println(w.a);
    }}
    只是无法体现多态性而已,还是可以用的。