我有3个子类$url = 'http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
file_put_contents('test.xlsx', $result);
,每个子类都有唯一的imagePath。
因此,由于所有实例共享同一图像,因此我实现了Child_1, Child_2, Child_3
。
这是问题所在。我想从父实例public static String 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
假设我有10个子类,那么使用if else语句并一一调用它并不容易。
有什么方法可以从Java的父实例中调用子静态方法?
答案 0 :(得分:0)
为什么首先要使该方法静态化?您需要创建一个可能是抽象的父类,然后仍然使用运行时多态。
答案 1 :(得分:0)
这是错误的解决方法。您应该依靠Polymorphism来解决此类问题。
一种解决方案可能是声明接口ImageProcessor
:
public interface ImageProcessor {
Image showImage(Parent p)
}
您所有的Child_2
,Child_2
...类都应实现ImageProcessor
并编写其实现。
现在,您不需要使用if-else语句来运行特定的行为。您可以致电:
m.showImage(parent)
答案 2 :(得分:0)
就像所有其他前面提到的那样,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;
}
}
有什么理由不能使用这种方法?