class a{ public void test1(){System.out.print("a:test1");}
}
class b extends a{ public void test1(){System.out.print("a:test1");}
public void testOnly(){System.out.print("b:testonly");}}
public class c
{
public static void main(String[] args){
a a_1=new b();
a_1.test1();//输出a:test1
a_1.testOnly();//编译出错 找不到相应方法
}
}代码与运行结果如上,正如大家所知 动态绑定是 将调用方法的调用与方法主体进行绑定,因此由于a_1所引用的是b对象所以直接调用了b中的test1() 但为什么testonly()方法时候就报错呢 既然方法的调用都是动态绑定过程 为什么就不能因为找到b对象而使用b的方法???/
声明是a类型,就要将所有a类型下的方法找出来,然后根据对象的指向 是b () 调用b类中的方法。而目前你的a类中根本没有testOnly()方法,所以编译器会报错。你在a中也写个 testOnly()方法,哪怕是空实现都行。
其实 可以找到 b 对象
但 只能找到 b 对象中的 test1()因为你用a的类型为参照找b对象,a的类型里有test()1所以可以只能找到b中的test1()
但a类型里没有testOnly()啊!!所以错了
b a_1=new b();