当前位置: 首页 > 面试题库 >

防止继承静态块

喻子航
2023-03-14
问题内容

如果我们运行派生类,它将打印派生类和父类。是否有任何方法可以防止静态块的继承

// Class 1

public class parent {
static {
      System.out.println("Parent");
}
}

// Class2

public class derived extends parent{
      static {
            System.out.println("derived");
      }

      public static void main(String [] args) {

      }
}

基本上我在父类中有一些方法要继承,但不希望实例化派生类时发生在父静态块中的处理。有没有办法做到这一点,否则我将不得不复制代码?


问题答案:

没有。 你不能这样做 。 静态的initialzier块不会被继承。
由于基类扩展了超类,因此在加载类时将执行静态块,即使超类定义也会在引用您的类时由JVM加载。

根据JLS
12.4.1

发生初始化时将在首次出现以下任何一项之前立即初始化类或接口类型T:

•T是一个类,并创建T的实例。

•T是一个类,并调用T声明的静态方法。

•分配了由T声明的静态字段。

•使用T声明的静态字段,并且该字段不是常量变量(第4.12.4节)。

•T是顶级类(第7.6节),并执行词法嵌套在T中的断言语句(第14.10节)(第8.1.3节)。



 类似资料:
  • 问题内容: 我的侧边栏中有一个使用嵌套列表( 和 标记)的分层导航菜单。我使用的预制主题已经具有列表项的样式,但是我想更改顶级项的样式,但不能将其应用于子项。是否有一种简单的方法可以将样式应用于顶级列表项标签,​​而无需将样式层叠到其子级列表项?我知道我可以在子项目中显式添加重写样式,但是如果有一种简单的方法,只是说“将这些样式应用于此类并且不要级联,我真的很想避免必须重复所有样式代码”他们将其归

  • 我有几个配置文件,比如: application.yaml 我想我需要一些定制属性spring Binder.class定制,但我找不到任何解决方案。 提前感谢!

  • 问题内容: 我不太明白为什么可以在Java中继承静态方法? 继承就像从基类继承,而Static属于Class而不是Object。 那么,如果静态仅属于该类,为什么它会滴入派生类呢?它不应该只与定义它的类一起使用吗? 继承静态方法是一种好的编程习惯吗? 问题答案: 在Java中,静态方法不是 继承的 (或正确的词被 覆盖 ),但可以 隐藏 。 这里最大的不同是它们不像对象方法那样经受多态性。 运行时

  • 问题内容: 我正在寻找一种奇妙的方式来防止闭合继承周围的scrope。例如: 我知道只有 两种方法可以 防止共享范围: (1)使用阴影变量: (2)将函数体放在其他位置: 我的问题是-有人知道防止闭包继承JS范围的第三种方法吗?花哨的东西很好。 我认为唯一可行的方法是在Node.js中。 让我们利用想象力来思考一下,并假设JS有一个private关键字,这意味着变量仅在该函数的作用域内是私有的,如

  • 问题内容: 假设我有以下课程: 以及这两个子类: 和 我的问题是这两个子类从父类共享相同的静态curID成员,而不是拥有不同的成员。 所以,如果我这样做: r1,r2,r3的ID为0,1,2,而t1,t2,t3的ID为3,4,5。除了这些,我希望t1,t2,t3的值分别为0、1、2,即使用curID静态变量的另一个副本。 这可能吗?如何? 问题答案: 正如其他人已经写过的,静态成员已绑定到该类,因

  • 问题内容: 我想要以下设置: 这在Java中可能吗?怎么样?如果可以避免的话,我宁愿不使用实例变量/方法。 谢谢! 编辑: 常量是数据库表的名称。每个子对象都是一个微型ORM。 问题答案: 您无法完全按照自己的意愿去做。也许可以接受的折衷方案是: