上一篇说了java中多个子类实现同一个接口,怎么区分调的是哪一个实现类
java中多个子类实现了父类的同一个抽象方法,那么我调用该抽象方法时如何确定走哪一个子类的同名方法呢?
答:
抽象类无法实例化,实例化的只能是子类。如Father是一个抽象父类,有一个talk抽象方法,和一个speak的普通方法。Son,Son2是他的子类,有一个talk方法的具体实现。
那么可以Father f =new Son();这里不能new Father,抽象类无法实例化,而f.talk();调用的是Son的talk具体实现,f的本质还是Son,当作Father在处理而已。而f.speak(),调用的也是Son的speak();因为这是Son继承过来的,没有重写的话,会跟Father的speak()方法一模一样。
如果是Father f=new Son2();那么f调用的方法就全是Son2这个类的。
假如做了某种封装,某个方法返回了一个Father,那么你只能根据那个方法具体的代码来看到底那个实例是哪一个So
还有两种方式:
1 注解@Serice("别名")
2 注解@Qualifier
希望对你有帮助!