Java 如何从父类调用指定的方法?
我有两个从同一父类扩展而来的类。在这些类中,我有一个名称相同但实现不同的方法。有没有办法从父类调用这个特定的方法?请找到下面的示例代码Java 如何从父类调用指定的方法?,java,inheritance,Java,Inheritance,我有两个从同一父类扩展而来的类。在这些类中,我有一个名称相同但实现不同的方法。有没有办法从父类调用这个特定的方法?请找到下面的示例代码 public class Fruit { public String callingName () { //calling specified method getTaste() here // return specified value; } } public class Orange extends
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本身必须决定从callingName()方法调用哪个是正确的getTaste()。
感谢您的帮助。是的,请使用抽象类
public abstract class Fruit {
protected abstract String getTaste();
public String callingName () {
String taste = getTaste(); //calling specified method getTaste() here
// return specified value;
}
}
必须在每个类中保护getTaste()。实现
public abstract class Fruit {
public abstract String getTaste ();
public String callingName () {
//calling specified method getTaste() here
// return specified value;
}
}
尝试使用工厂模式的概念:
public String callingName (String fruit) {
switch(fruit){
case "Orange" :
return new Orange().getTaste();
case "Banana" :
return new Banana().getTaste();
}
}
在这里,您不需要将水果类创建为抽象类,您可以创建它的对象。我认为最好的方法是将水果抽象化,因为您不太可能实例化它 给它一个名为name的受保护属性和一个相关方法(我会使用getName而不是调用name来遵循约定) 在Orange和Banana的构造函数中,只需为属性名指定正确的值,并重写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();
}
}
它是Java继承的一个内置特性。如果扩展类的一个实例被上推,那么它的方法被调用,它的原始方法仍将被调用。它也是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();
}
}
}
若要创建水果类的对象,则不能将水果类作为抽象类。你有这样的情况吗?谢谢你的回答,我真的很感激。是的,我有一个约束条件,即我无法知道客户端传递的对象到底是什么。它可以是橙色或香蕉色的物体。我只需要从调用名为()的父类方法中确定,这正是从客户端传递的对象调用的getTaste()方法。我应该使用反射来检查确切的类/对象类型吗?非常感谢。