假设我有两个自定义类和一个方法如下:
class A {
public void think() {
// do stuff
}
}
class B {
public void think() {
// do other stuff
}
}
Class C {
public void processStuff(A thinker) {
thinker.think();
}
}
有没有办法像这样写processStuff()
(只是说明):
public void processStuff({A || B} thinker) {...}
或者,换句话说,有没有办法用一个接受多种类型的参数编写一个方法,以避免多次输入processStuff()
方法?
答案 0 :(得分:13)
在接口中定义所需的行为,让A
和B
实现接口,并声明processStuff
将接口的实例作为参数。
interface Thinker {
public void think();
}
class A implements Thinker {
public void think() { . . .}
}
class B implements Thinker {
public void think() { . . .}
}
class C {
public void processStuff(Thinker thinker) {
thinker.think();
}
}
答案 1 :(得分:5)
在这种情况下,最简单的是定义一个接口
interface Thinker {
public void think();
}
然后让你的类实现它:
class A implements Thinker {
public void think() {
// do stuff
}
}
并将其用作参数类型:
Class C {
public void processStuff(Thinker t) {
t.think();
}
}
答案 2 :(得分:5)
将Thinker
定义为接口:
public interface Thinker
{
public void think();
}
然后让课程A
和B
实现它:
public class A
implements Thinker
最后,定义processStuff()
以Thinker
作为参数。
答案 3 :(得分:1)
您可以创建一个包含think
方法的公共界面,让A
和B
实现它。
或者你可以重载processStuff()
并有两个实现,每个实现一个类。
答案 4 :(得分:1)
在这种情况下,您可以简单地使用多态性。为此,您需要重载方法 - 创建具有相同名称但不同参数类型的方法。 java不检查方法名称,它检查方法签名(方法名称+参数+返回类型),例如:
public class foo
{
public int add(int a, int b)
{
int sum = a+b ;
return sum ;
}
public String add(String a, String b)
{
String sum = a+b ;
return sum ;
}
public static void main(String args[])
{
foo f = new foo() ;
System.out.printf("%s\n",f.add("alpha","bet));
System.out.printf("%d", f.add(1,2);
}
}
此代码应返回
alphabet
3
正如您所看到的,两种方法签名不同,因此没有错误。 请注意,这只是一个可以做什么的例子。