当一个方法的参数是一个接口类型时,如果一个类实现了该接口,那么就可以把该类的实例的引用传值给该参数,参数可以回调类实现的接口方法?
例子如下:
interface Show{
void show();
}
class A implements Show{
public void show(){
System.out.println("我喜欢NBA");
}
}
class B{
public void f(Show s){
s.show();
}
}
public class C{
public static void main(String[]args){
B b=new B();
b.f(new A());
}
}
我想知道的是为什么能把类A的实例的引用传值给类B做它方法f的参数呢?
例子如下:
interface Show{
void show();
}
class A implements Show{
public void show(){
System.out.println("我喜欢NBA");
}
}
class B{
public void f(Show s){
s.show();
}
}
public class C{
public static void main(String[]args){
B b=new B();
b.f(new A());
}
}
我想知道的是为什么能把类A的实例的引用传值给类B做它方法f的参数呢?
类B的f方法里需要传一个接口Show的实例(就跟类Show的实例差不多)作为参数;
类A实现了接口Show(就跟继承了类Show差不多);
所以就可以把类A的实例的引用传值给类B做它方法f的参数(父类引用指向子类对象);
你是不是写错了
贴下一正确的代码~
说白了,这种做法就是"向上转型",在java中,向上转型是安全的,想要再底层的东西的话可以去google下向上转型的相关信息