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 错误
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 错误
Work 里面都没有定义 a
哪儿来的w.a
一个接口引用,指向实现类的对象。因为你拿到的引用是接口的,所以只能操作接口里定义的方法和变量。
System.out.println(g.a);
嗯,这样是可以的。
System.out.println(w.a);//所以这里调用会出错的。
所以即便你在接口中定义了a。也不会调用类中的a。
调用的还是接口中的a.下面是体现普通方法的多态性:
public static void main(String[] args) {
// TODO Auto-generated method stub
Work w=new G();
w.walk(); }
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);
}}
只是无法体现多态性而已,还是可以用的。