class base{}
class childA extends base{}
class childB extends base{}
我有两个函数(重载) 像这样:
function(childA,childA){}
function(childA,childB){}
//主程序
base a = new childA();
base b = new childB();
function(a,b);
function(a,a); //problem
函数调用显然不会编译。
但是有没有一种方法可以获得相同的效果,而不会使代码过于复杂或每次调用函数时都进行类型检查。
注意:重载函数与类无关。这些类只是数据结构,我宁愿其中没有任何相互依赖的代码。
PS。我浏览了很多涵盖类似问题的主题,但它们似乎没有解决上述问题。抱歉,如果我错过了一些东西(新手、第一篇文章等:))。编辑:
似乎我的例子有点模糊,我只是想总体理解这个概念,而不仅仅是解决当前问题。上面的代码不起作用似乎很奇怪,如果它起作用的话将是一个强大的功能。
好吧,另一个例子,这正是我想要做的。
class Shape{}
class Rectangle extends Shape{
//rectangle data
}
class Circle extends Shape{
//circle data
}
重载函数(另一个类的成员)
boolean checkIntersection(Rectangle r, Circle c){}
boolean checkIntersection(Circle c, Circle c){}
//主程序
Vector<Shape> shapes = new Vector<Shape>();
shapes.add(new Rectangle());
shapes.add(new Circle());
shapes.add(new Circle());
checkIntersection(shapes.get(0),shapes.get(1));
checkIntersection(shapes.get(1),shapes.get(2));
最佳答案
问题是您的方法采用 childA
或 childB
对象作为参数,而您却给它一个 base
对象
更改方法签名以将基类作为参数,这样可以解决问题,但会失去多态性
function(base a,base b){}
您可以做的是将变量 a
和 b
更改为
childA a = new childA();
childB b = new childB();
如果您想继续使用 base 而不是 childA 或 childB,也许您应该看看方法重写而不是重载。
你在base中定义了一个方法
someMethod(){
//do something
}
然后在您的子类中覆盖它,例如
@override
someMethod(){
//do something specific to childA
}
然后当你这样做
base a = new childA();
并调用
a.doSomething();
它将调用childA中重写的方法
关于java - 使用基类引用的派生类对象重载方法 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434999/