我已经读过1000多个位置,这些位置不继承静态变量。但是,这段代码如何正常工作?
Parent.java
public class Parent {
static String str = "Parent";
}
Child.java
public class Child extends Parent {
public static void main(String [] args)
{
System.out.println(Child.str);
}
}
此代码显示“父母”。
还阅读了一些隐藏数据的概念。
Parent.java
public class Parent {
static String str = "Parent";
}
Child.java
public class Child extends Parent {
static String str = "Child";
public static void main(String [] args)
{
System.out.println(Child.str);
}
}
现在输出为“ Child”。
那么这是否意味着 静态变量被继承,但是它们遵循数据隐藏的概念 ?
请查看oracle的文档:http
:
//docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e12110
只要不被具有相同标识符的另一个静态变量隐藏,静态变量就会被继承。
问题内容: 我正在阅读Khalid Mughal 撰写的Java™SCJP认证程序员指南。 在“继承”一章中,它说明了 成员的继承与声明的可访问性紧密相关。如果超类成员可以通过子类中的简单名称来访问(不使用任何其他语法,如super),则该成员被视为继承的 它还提到静态方法不是继承的。但是下面的代码完全可以: 我如何直接在课堂上使用?甚至更多,也可以。 这本书的解释仅适用于实例方法吗? 问题答案:
问题内容: 我想要以下设置: 这在Java中可能吗?怎么样?如果可以避免的话,我宁愿不使用实例变量/方法。 谢谢! 编辑: 常量是数据库表的名称。每个子对象都是一个微型ORM。 问题答案: 您无法完全按照自己的意愿去做。也许可以接受的折衷方案是:
问题内容: 我有六个类,它们都扩展了相同的抽象类。抽象类具有一个静态变量,该静态变量指向一些JNI代码,我只希望在每个类实例化时加载一次。 据我了解,这将导致实例化此静态变量的一个实例,但是我想要的是每个扩展类都具有自己的变量静态实例,该实例对于给定的子类是唯一的。我想在我的抽象类中编写一些代码来修改和/或释放该抽象类。是否可以同时执行这两项操作? 例如,我可以编写一个抽象类栏,其中包含变量foo
问题内容: 如果我们运行派生类,它将打印派生类和父类。是否有任何方法可以防止静态块的继承? // Class 1 // Class2 基本上我在父类中有一些方法要继承,但不希望实例化派生类时发生在父静态块中的处理。有没有办法做到这一点,否则我将不得不复制代码? 问题答案: 没有。 你不能这样做 。 静态的initialzier块不会被继承。 由于基类扩展了超类,因此在加载类时将执行静态块,即使超类
问题内容: 我正在用Java 构建一个类。逻辑本身可以工作并找到期望的解决方案(带有任意数量的参数)。无论如何,部分项目如我所料。 问题来自解决方案表示的问题。可以公平地说,我已经用Python完成了这个项目,并决定尝试使用Java作为一种介绍,这可能是问题所在,我也想像Python一样这样做。 这是我的一些课程: 问题是它仍然从Operation类获取令牌:“ null” 我知道这可能是因为op
问题内容: 我不太明白为什么可以在Java中继承静态方法? 继承就像从基类继承,而Static属于Class而不是Object。 那么,如果静态仅属于该类,为什么它会滴入派生类呢?它不应该只与定义它的类一起使用吗? 继承静态方法是一种好的编程习惯吗? 问题答案: 在Java中,静态方法不是 继承的 (或正确的词被 覆盖 ),但可以 隐藏 。 这里最大的不同是它们不像对象方法那样经受多态性。 运行时