首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用子类名调用不同父接口中的方法?

如何使用子类名调用不同父接口中的方法?
EN

Stack Overflow用户
提问于 2022-08-18 12:06:17
回答 1查看 75关注 0票数 0

我正在将一个项目从python迁移到java。有一个多继承的python工具类,称为Util(TimeUtil, MathUtil, FileUtil, ...),它扩展了几个Util类。例如

代码语言:javascript
运行
复制
# python
class MathUtil(object):
    @staticmethod
    def add(n, m):
        return n + m


class TimeUtil(object):
    @staticmethod
    def date_to_str():
        return '2022-01-01'


class Util(MathUtil, TimeUtil):
    @staticmethod
    def do_something():
        return

Util.add(1, 2)

通常,我会在python中调用Util.date_to_str()Util.add()Util.read_file(),导入类Util就足够了,并且我可以通过类名调用父类的静态方法。

我希望将util函数分离为不同的util类。您能告诉我如何在java中实现使用子类名(而不是实例)调用多个父级静态方法吗?如果不是这样的话,为什么?

我试过的

显然,我不能在java中多个扩展其他类。

我尝试了接口,我把默认的方法放在父接口中,我必须创建子类的一个实例来调用父类中的方法。因为它是一个Util类,所以不确定,我想使用类名来调用方法,而不是类的实例。

代码语言:javascript
运行
复制
import java.util.Date;

interface MathUtil {

    default int add(int n, int m){
        return n + m;
    }
}

interface TimeUtil{
    default String parseDate(Date date) {
        return "2022-01-01";
    }
}
public class Util implements MathUtil, TimeUtil {

    public static void main(String[] args) {
//        expect code 
//         int add = Util.add(1, 2); 
//         compile error
//         Non-static method 'add(int, int)' cannot be referenced from a static context

        // actual code, it is compiled
        Util util = new Util();
        int add = util.add(1, 2);
    }
}

如果我将父接口中的默认方法更改为静态方法,则必须调用父接口名为MathUtil.add(1, 2)的方法,否则将得到编译错误:静态方法可能在只包含的接口类上调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-18 12:28:52

如果在一个add()类中定义了一个静态方法MathUtil,那么使用MathUtil.add(...)调用它。

如果要调用add()方法(如Util.add(...) ),请将其放入Util类中。

在Java中,您必须决定所需的两种样式中的哪种。你不能两者兼得。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73402808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档