关于继承和static的小问题

2019-03-25 13:38|来源: 网路

今天帮同事写接口的时候,想到一个问题:现在有2个类 class parent{...} ,class son{...}

在parent中定义了一个static{
   System.out.println("do test !");
}

现在用son类去extends parent 类,然后在son中调用了parent的普通方法的时候,static块中的代码是否会被执行?

相关问答

更多
  • 所以是的,有一种方法只用父类方法来完成它: class A { public static $data = ['a']; public static function getData() { $result = static::$data; $class = get_called_class(); while ($class = get_parent_class($class)) { $result = ar ...
  • 3在所有情况下,由于SomeDerivedClass继承的static int total是SomeClass ,而不是一个不同的变量。 编辑:实际上在所有情况下都是4 ,因为@ejames在他的回答中发现并指出,看到。 编辑:第二个问题中的int在这两种情况下都缺少int ,但是添加它可以确定,即: class A { public: static int MaxHP; }; int A::MaxHP = 23; class Cat: A { public: static const i ...
  • 可访问的所有方法都由子类继承。 从Sun Java 教程 : 子类继承其父类的所有公共和受保护成员,无论子类在哪个包中。如果子类与其父类在同一个包中,它也将继承父类的包私有成员。 您可以使用继承的成员,替换它们,隐藏或添加新成员 与继承的静态(类)方法和继承的非静态(实例)方法的唯一区别在于,当您使用相同的签名编写新的静态方法时,旧的静态方法才被隐藏,而不会被覆盖。 从页面上的覆盖和隐藏的区别。 隐藏和覆盖之间的区别具有重要的意义。 被调用的覆盖方法的版本是子类中的一个。 被调用的隐藏方法的版本取决于是否从 ...
  • 从这里引用: 这实际上是设计的。 似乎没有好的理由继承一个静态类。 它具有公共静态成员,您可以随时通过类名本身访问。 我所看到的继承静态东西的唯一原因是坏的,比如保存几个字符的打字。 可能有理由考虑将静态成员直接引入范围的机制(我们实际上会在Orcas产品周期之后考虑这一点),但静态类继承不是要走的:这是错误的机制,使用和工作仅适用于静态成员驻留在静态类中。 (Mads Torgersen,C#语言PM) channel9的其他意见 .NET中的继承只适用于实例基础。 静态方法是在不在实例级上的类型级别上定 ...
  • 静态成员函数不适用于非静态成员,因为它们没有附加到它们的对象; 他们缺少隐含的this指针,它被无形地传递给非静态成员函数。 解决这个问题的方法是显式传递指向要使用的对象的指针。 您的静态函数将可以访问对象的私有和受保护成员,因为它是类的一部分。 Static member functions don't work on non-static members because they don't have an object attached to them; they are missing the im ...
  • 首先,在继承getType()方法时应该使用protected visibility: protected static function getType(); 要获得当前类型,请使用静态关键字的PHP 5.3新功能: http : //php.net/manual/en/language.oop5.late-static-bindings.php $query = "SELECT * FROM letters WHERE type = " . static::getType(); 静态确保将使用后期绑 ...
  • 今天有一个类似的问题: 引用没有名称的类在TypeScript中的子类中使用不同的静态方法 。 有一个讨论/建议让this.constructor在这里返回正确的类型: T.constructor应该是T类型 。 至于你现在可能的解决方案: 没有静态: class A { public show() { alert(this.getItems().FOO); } protected getItems() { return { ...
  • 如果您将其重新定义为“从Holder_A_base_2 *到Holder_B_base * static_cast是否合法?”,您的问题就更容易理解了。 不,它不是,它不会编译。 从Anchor *到Holder_B_base *将编译,但将是Undefined Behavior,除非Anchor对象指向的是Holder_B_base一部分。 如果你需要从任何Anchor *转换为不属于它的类,你可以使用dynamic_cast 。 这允许交叉演员。 Your question is easier to u ...
  • 我会使用组合而不是继承: class B { static A a; }; 因为无论如何你都不可能满足带有B的LSP ,如果你想让继承的成员static 。 关于上下文,我只想在Memory创建一个静态保护的分配器: class Memory { protected: static void* allocate(); static void destroy (void*); 并在new和delete运算符中使用它们: public: void* operator new ...
  • 因为第一个调用将在内部转换为Console.WriteLine(ClassA.val1); 这首先是看起来应该是这样的。 能够调用ClassB.val1只是编译器方面的便利。 val1字段仅与ClassA相关,与运行时的ClassB无关。 Because the first call will be converted internally to Console.WriteLine(ClassA.val1); which is how the call should look like in the fir ...