我有2个类从同一个父类扩展而来。在这些类中,我有相同名称但实现不同的方法。有没有办法从其父类调用此特定方法?请在下面找到示例代码
public class Fruit {
public String callingName () {
//calling specified method getTaste() here
// return specified value;
}
}
public class Orange extends Fruit{
private String getTaste(){
return "Orange has sour taste";
}
}
public class Banana extends Fruit{
private String getTaste(){
return "Banana has sweet taste";
}
}
在这种情况下,我对香蕉或橙子没有任何提及。 Fruit类本身必须决定从callName()方法调用哪个是正确的getTaste()。 谢谢你的帮助。
答案 0 :(得分:1)
是的,使用抽象类
public abstract class Fruit {
protected abstract String getTaste();
public String callingName () {
String taste = getTaste(); //calling specified method getTaste() here
// return specified value;
}
}
您必须在每个类中保护getTaste()。
答案 1 :(得分:1)
尝试使用工厂模式的概念:
public String callingName (String fruit) {
switch(fruit){
case "Orange" :
return new Orange().getTaste();
case "Banana" :
return new Banana().getTaste();
}
}
在这里,您不需要将Fruit类创建为抽象,您可以创建它的对象。
答案 2 :(得分:0)
实施
public abstract class Fruit {
public abstract String getTaste ();
public String callingName () {
//calling specified method getTaste() here
// return specified value;
}
}
答案 3 :(得分:0)
我看到最好的方法,因为你不可能实例化它,所以使Fruit成为抽象的。
给它一个名为 name 的受保护属性,以及一个相关的方法(我将使用 getName 而不是 callingName 来遵循约定) 。
在 Orange 和 Banana 的构造函数中,只需使用正确的值分配属性 name ,并覆盖 getName 方法。
因此:
public abstract class Fruit {
protected String name;
public String getName() {
return name;
}
}
public class Banana extends Fruit {
public Banana() {
name = "Banana";
}
public String getName() {
return super.getName();
}
}
答案 4 :(得分:0)
它是Java继承的内置功能。如果扩展类的实例是up-casted,则调用其方法,仍将调用其原始方法。它也是Java中面向对象实现的基本概念。
class Fruit {
protected String callingTaste() {
return "";
}
public String callingName() {
return callingTaste();
}
}
您可以使用以下示例测试上述概念:
class FruitProducer {
public static Fruit[] produce() {
Fruit[] list = new Fruit[] { new Orange(), new Banana() };
return list;
}
}
class UnknownClient {
public static void main(String args[]) {
Fruit[] listOfFruit = FruitProducer.produce();
foreach (Fruit f : listOfFruit) {
f.callingName();
}
}
}