当前位置: 首页 > 知识库问答 >
问题:

为什么静态块允许调用父类静态方法而不使用父类引用?[副本]

通安宁
2023-03-14

据我所知,通常应该使用类的引用来调用静态方法,或者如果它位于静态方法或静态块中,则可以不引用直接调用它。

但当从子类静态块调用静态方法时,这是否适用?

为什么它允许这样的事情,因为静态方法不是继承的,所以应该只允许使用父类名对吗?

public abstract class abs {

    /**
     * @param args
     */
    abstract void m();
    static void n(){
        System.out.println("satic method");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
class myclass extends abs{

    @Override
    void m() {
        // TODO Auto-generated method stub

    }
    static{
        n();
    }
}

为什么我的子类静态块可以在没有引用或类名的情况下调用父类静态方法?

共有3个答案

东方志尚
2023-03-14

因为您继承了父类,所以您可以直接访问该类的所有非私有成员,就像它属于子类一样。

洪祺
2023-03-14

通常静态方法应该使用类的引用来调用,或者如果它在静态方法或静态块中,则可以直接调用它而不引用。

不完全是。例如,实例方法可以调用静态方法而无需为类加上前缀。

更一般地说,静态成员(作为方法的字段)必须仅通过在其类的前缀来调用,因为编译器无法推断它们所属的类。
当您从子类调用父类中定义的静态方法时(并且静态方法在子类中继承),您不需要在编译器推断时为方法调用的类加上前缀。

司徒河
2023-03-14

静态方法由子类myclass继承,因此您可以在myclass的静态块中直接调用它。

 类似资料:
  • 这是我的代码: 还有我的测试,我单独运行。 当我运行test foo时,我将看到: 但是当我运行测试栏时,我看到的是: 引用本页内容。。 类对象由Java虚拟机在加载类时自动构造,并通过调用类加载器中的defineClass方法来构造。 所以我的理解是,在测试条中,愚蠢的类被加载,否则我会看到一个空的,我猜?所以类对象被创建,因为类本身被加载。。 现在引用这一页 静态初始化块在JVM(类加载器-具

  • 问题内容: 在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告: 严格标准 : 静态函数 Program :: getSelectSQL()在Program.class.inc中 不应抽象 有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应该在其子类(例如TVProgram)中实现。 我确实在这里找到有关此更改的参考: 删除

  • 问题内容: 给定以下类别: 我的目标不是像“因为在JLS中这样指定”这样的答案。我知道是的,因为JLS是12.4.1发生初始化时,其读取内容仅为: 类或接口类型T将在以下任何一种首次出现之前立即初始化: … T是一个类,并调用T声明的静态方法。 … 我对没有这样的句子是否有充分的理由感兴趣: T是S的子类,并且在T上调用S声明的静态方法。 问题答案: 我认为这与jvm规范的这一部分有关: 每个框架

  • 问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。

  • 想知道是否有一种在Java中实现这一点的方法。 想象一下,我想创建一个父类(可能是抽象的)并创建多个不同的子类。我希望所有类都有一个特定的字段,但我需要该字段在子上下文中是静态的。有没有办法在父类中定义它? 例如,假设我对名为Foo的字段有getter和setter。在父类中,静态字段初始化为字符串“foo”。我有两个儿童班AbsChildOne和AbsChildOne。我希望能够做到的是: 返回

  • 我有3个子类,每个都有唯一的ImagePath。 因此,我实现了,因为所有实例共享相同的映像。 问题就在这里。我想从父实例调用子静态方法。 当然,我可以使用调用基于类的静态方法。 假设我有10个子类,使用if-else语句并逐个调用它并不容易。 在Java中有没有办法从父实例调用子静态方法??