是否可以从父类型调用子静态方法?

时间:2019-10-27 09:31:08

标签: java

我有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的父实例中调用子静态方法?

3 个答案:

答案 0 :(得分:0)

为什么首先要使该方法静态化?您需要创建一个可能是抽象的父类,然后仍然使用运行时多态。

答案 1 :(得分:0)

这是错误的解决方法。您应该依靠Polymorphism来解决此类问题。

一种解决方案可能是声明接口ImageProcessor

public interface ImageProcessor {
  Image showImage(Parent p)
}

您所有的Child_2Child_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;
    }
}

有什么理由不能使用这种方法?