首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能调用继承的公共方法而不以主方法的引用作为前缀?

为什么我不能调用继承的公共方法而不以主方法的引用作为前缀?
EN

Stack Overflow用户
提问于 2014-12-03 09:27:24
回答 4查看 75关注 0票数 0

我在同一个包里有下面的课程:

代码语言:javascript
复制
class Roo {
    public String doRooThings()
    {
        return "Rooing!";
    }
}

class Cloo extends Roo {
    public static void main(String[] args) 
    {
        System.out.println(doRooThings());
    }
}

在执行此操作时,无法从Roo错误类型中对非静态方法doRooThings()进行静态引用。

但是,我可以从子类doRooThings()方法中调用它(而不必用引用作为前缀),如下所示:

代码语言:javascript
复制
class Cloo extends Roo {
    public void testRoo()
    {
        System.out.println(doRooThings());
    }
    public static void main(String[] args) 
    {
        new Cloo().testRoo();
    }
}

有人能告诉我这是怎么回事吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-03 09:55:13

在第一种情况下,主要方法是静态,而方法doRooThings()则是这个非静态方法。在静态方法中,不能引用非静态(实例)方法。

但是在第二种情况下,您可以调用非静态方法testRoo(),因为您在静态上下文中创建了一个实例。类似地,即使在第一种情况下,也可以通过创建实例来调用非静态方法,如下所示:

new ().doRooThings()或new ().doRooThings()

票数 0
EN

Stack Overflow用户

发布于 2014-12-03 09:29:01

因为main()方法在static上下文中运行。静态表示您没有该类的有效实例。这意味着Java不知道在哪个实例上调用该方法.

阅读一些基础知识,如这一解释

票数 2
EN

Stack Overflow用户

发布于 2014-12-03 09:30:16

main是一个静态方法,因此它不与类的任何实例相关联。因此,它不能调用实例方法(因为它需要与实例相关联),除非它首先创建一个实例。也许你需要读更多关于静态意义的文章

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

https://stackoverflow.com/questions/27267919

复制
相关文章

相似问题

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