如何多态调用两个接口同名方法

gh6883123 2019-03-26 10:57:30
interface A{
void f();
}

interface B{
void f();
}

class C implements A {
public void f() {
System.out.println("C()");
}
}

class D implements B{
public void f() {
System.out.println("D()");
}
}

public class F{
A a = null;
B b = null;

F(A a, B b){
this.a = a;
this.b = b;
}

public void select() {
if(a != null)
a.f();
else if(b != null)
b.f();
}

public static void main(String[] args) {
F f = new F(new C(), new D());
f.select();
}
}
A、B是接口,C、D是实现类
A接口和B接口的方法是同名方法,A和B的代码是别人的库,无法改动。
请问除了组合外可以用什么方法去多态调用A和B接口的方法?
...全文
387 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
杀猪剑客 2019-03-28
  • 打赏
  • 举报
回复
引用 1 楼 gh6883123 的回复:
[quote=引用 1 楼 qybao 的回复:]
调用a,b有什么条件吗?
select用个参数可以吗?比如
select(p Object) {
if (p instaceOf A) ((A)p).f()
}


a、b就是普通的实现类,没什么调用条件。
seelct加个参数是可以,但是是加个Object类型吗?这样是不是太泛化了。
public class F implements A,B{

public void f() {
System.out.println("F()");
}

public void select(Object obj){
if (obj instanceof A) ((A)obj).f();
if (obj instanceof B) ((B)obj).f();
}

public static void main(String[] args) {
F f = new F();
f.select(new D());
}
}

这样实现会不会更好?
public class F{
public void select(Class obj) throws InstantiationException, IllegalAccessException{
Object obj1 = obj.newInstance();
if (obj1 instanceof A) ((A)obj1).f();
if (obj1 instanceof B) ((B)obj1).f();
}

public static void main(String[] args) throws InstantiationException, IllegalAccessException {
F f = new F();
f.select(D.class);
}
}[/quote]毫无意义!要说哪种好,我觉得第一种好!
浪费七年时间 2019-03-26
  • 打赏
  • 举报
回复
没太明白你想做什么,接口方法返回值、方法名和参数都相同的话,同时"implements A,B",一个实现就是同时实现这两个接口
qybao 2019-03-26
  • 打赏
  • 举报
回复
调用a,b有什么条件吗? select用个参数可以吗?比如 select(p Object) { if (p instaceOf A) ((A)p).f() }
gh6883123 2019-03-26
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
调用a,b有什么条件吗?
select用个参数可以吗?比如
select(p Object) {
if (p instaceOf A) ((A)p).f()
}


a、b就是普通的实现类,没什么调用条件。
seelct加个参数是可以,但是是加个Object类型吗?这样是不是太泛化了。
public class F implements A,B{

public void f() {
System.out.println("F()");
}

public void select(Object obj){
if (obj instanceof A) ((A)obj).f();
if (obj instanceof B) ((B)obj).f();
}

public static void main(String[] args) {
F f = new F();
f.select(new D());
}
}

这样实现会不会更好?
public class F{
public void select(Class obj) throws InstantiationException, IllegalAccessException{
Object obj1 = obj.newInstance();
if (obj1 instanceof A) ((A)obj1).f();
if (obj1 instanceof B) ((B)obj1).f();
}

public static void main(String[] args) throws InstantiationException, IllegalAccessException {
F f = new F();
f.select(D.class);
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧