我有3个子类Child_1,Child_2,Child_3
,每个都有唯一的ImagePath。
因此,我实现了公共静态字符串getImage()
,因为所有实例共享相同的映像。
问题就在这里。我想从父实例p
调用子静态方法。
private Image showImage(Parent p){
Image image = null;
try {
image = new Image(new FileInputStream(m.getImage()); // <- static method call
}catch(FileNotFoundException e) {
e.printStackTrace();
}
return image;
}
当然,我可以使用instanceof
调用基于类的静态方法。
if(m instanceof Child_1) Child_1.getImage();
else if (m instance of Child_2) Child_2.getImage();
else Child_3.getImage();
假设我有10个子类,使用if-else语句并逐个调用它并不容易。
在Java中有没有办法从父实例调用子静态方法??
正如前面提到的所有其他方法一样,Java中常用的方法是使用多态性。这意味着您可以使用抽象方法getImage()声明一个抽象类,该抽象方法可以由子类本身实现。
所以你的例子会变成这样:
public abstract class AbstractFunctionExample {
private Image showImage(Parent p){
Image image = null;
try {
image = new Image(new FileInputStream(this.getImage());
}catch(FileNotFoundException e) {
e.printStackTrace();
}
return image;
}
protected abstract String getImage();
}
public class ChildClass extends AbstractFunctionExample {
private final String path;
public ChildClass(String pathToImage) {
this.path = pathToImage;
}
@Override
protected String getImage() {
return path;
}
}
你有什么理由不能使用这种方法吗?
这是解决问题的错误方法。对于这种类型的问题,您应该依赖多态性。
一种解决方案可能是声明一个接口ImageProcessor
:
public interface ImageProcessor {
Image showImage(Parent p)
}
您所有的Child_2
,Child_2
。。。类应该实现ImageProcessor
,并编写它们的实现。
现在,您不需要使用if语句来运行特定的行为。你可以打电话给:
m.showImage(parent)
为什么你首先希望这个方法是静态的?你需要创建一个父类,可能是抽象的,然后使用运行时多态。
问题内容: 指这里 A是预编译的Java类(我也有源文件)B是我正在编写的Java类 B扩展了A。 如何实现逻辑,以便A可以调用B拥有的方法。 以下是条件: 我不想触摸A(尽管没有其他解决方案,但这只是最后一个选择)。 我不想使用反射。 如前所述,如果需要,我可以修改A。哪种方式可能是可行的解决方案? 问题答案: 类应该定义将要调用的方法(可能是抽象方法,根据Paul Haahr的出色指南,A应该
问题内容: 我有一个包含静态创建方法的类。 当我使用时,它可以被编译。但是当我使用时,它编译失败,如何指定泛型? 问题答案: 假设您询问有关在类型推断失败的情况下显式指定类型的信息,则可以使用(请注意,该类型在after之后而不是before之前)。
问题内容: 没有静态成员可以使用类型参数,但是可以使用泛型类型参数调用静态成员吗?例如:- 这里的add()是一个静态方法。 在类似的主题上也有一些C#问题和答案,但是我不太确定如何在Java中使用它。 问题答案: 不,如果A是泛型类型,则无法执行。(Bozho对fast的回答是:),可能认为A是具体类型。 可行的方法如下。 但这可能不是您想要的。 阅读您的评论后,听起来您真正想要做的是: 您
问题内容: 我在基类中定义了一个静态方法,我想在其子类中重写此方法,这可能吗? 我尝试了一下,但是没有按预期工作。当我创建类B的实例并调用其callMe()方法时,将调用类A中的静态foo()方法。 问题答案: 静态方法调用在编译时解决(不动态分配)。 给
问题内容: 在Python中创建简单的对象层次结构时,我希望能够从派生类中调用父类的方法。在Perl和Java中,有一个用于此的关键字()。在Perl中,我可以这样做: 在Python中,似乎必须从子代中明确命名父类。在上面的示例中,我将不得不执行。 这似乎不正确,因为这种行为使创建深层次结构变得困难。如果孩子们需要知道哪个类定义了一个继承的方法,那么就会造成各种各样的信息痛苦。 这是python
问题内容: 我有以下课程 这只是我实际架构的简化版本。最初,我不知道需要创建的人员类型,因此处理这些对象创建的函数将常规对象作为参数。 现在,我想使用此父类对象访问子类的方法。我还需要不时访问父类方法,所以 我不能 使其 抽象 。 我想我在上面的示例中简化太多了,所以这是实际的结构。 if语句显示“无法为QuestionOption找到getMultiple”。OuestionOption具有更多